{"id":17478500,"url":"https://github.com/avaprotocol/eigenlayer-avs","last_synced_at":"2026-04-14T01:01:09.383Z","repository":{"id":236366666,"uuid":"782637470","full_name":"AvaProtocol/EigenLayer-AVS","owner":"AvaProtocol","description":"AvaProtocol Ethereum Automation Build on EigenLayer","archived":false,"fork":false,"pushed_at":"2026-01-29T08:38:15.000Z","size":80653,"stargazers_count":79,"open_issues_count":12,"forks_count":75,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-29T22:29:55.423Z","etag":null,"topics":["eigenlayer","eigenlayer-avs","eigenlayer-operators","ethereum"],"latest_commit_sha":null,"homepage":"https://avaprotocol.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AvaProtocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-05T17:47:32.000Z","updated_at":"2026-01-29T07:50:42.000Z","dependencies_parsed_at":"2024-04-26T19:28:26.201Z","dependency_job_id":"feff2b69-8475-4d79-baad-c7f8458b7bd4","html_url":"https://github.com/AvaProtocol/EigenLayer-AVS","commit_stats":{"total_commits":70,"total_committers":7,"mean_commits":10.0,"dds":0.3142857142857143,"last_synced_commit":"bf48a9c98a2864ff551b99fca941b3e9f1611dfc"},"previous_names":["oak-foundation/avs-mvp","avaprotocol/avs-mvp","avaprotocol/eigenlayer-avs"],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/AvaProtocol/EigenLayer-AVS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AvaProtocol%2FEigenLayer-AVS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AvaProtocol%2FEigenLayer-AVS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AvaProtocol%2FEigenLayer-AVS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AvaProtocol%2FEigenLayer-AVS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AvaProtocol","download_url":"https://codeload.github.com/AvaProtocol/EigenLayer-AVS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AvaProtocol%2FEigenLayer-AVS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29567616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T00:47:08.760Z","status":"online","status_checked_at":"2026-02-18T02:00:09.468Z","response_time":162,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eigenlayer","eigenlayer-avs","eigenlayer-operators","ethereum"],"created_at":"2024-10-18T20:18:32.379Z","updated_at":"2026-04-14T01:01:09.374Z","avatar_url":"https://github.com/AvaProtocol.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ava Protocol Automation On Ethereum\n\n\u003e **Latest Update**: Enhanced with structured error system (ErrorCode enum) and improved operator reconnection logic for better reliability.\n\nThe Ava Protocol AVS can be compiled directly using Go version 1.22+. Ensure you have the appropriate version of Go installed on your development environment.\n\nCheck Go version:\n\n```\ngo version\n```\n\nCompile Ava Protocol AVS:\n\n```\ngo build -o ap-avs\n```\n\nThen you can run `ap-avs` binary. We make an effort to use pure Go so you can also cross compile for any supported architecture that the Go compiler support.\n\n## Run operator\n\nCheck how to run an [operator docs](docs/Operator.md)\n\n### Run aggregator\n\nTo run the aggregator, use the following command:\n\n```\nap-avs aggregator\n```\n\nNote: The Ava Protocol team currently manages the aggregator, and the communication IP address between the operator and the aggregator is hardcoded in the operator.\n\n### Fee Estimation\n\nSee [docs/FEE_ESTIMATION.md](docs/FEE_ESTIMATION.md) for the fee pricing model, configuration, and implementation details.\n\n#### Benefits\n\n- **Dynamic Pricing**: Change rates without code deployments\n- **Environment-Specific**: Different rates for dev/staging/production\n- **A/B Testing**: Test different pricing models\n- **Backward Compatible**: Works without any configuration changes\n- **Partial Overrides**: Only specify rates you want to change\n- **Zero Disruption**: Existing configurations continue to work\n\n# How it works\n\n\u003ctable\u003e\u003ctr\u003e\u003ctd bgcolor='white'\u003e\u003cimg src=\"docs/highlevel-diagram.png\"/\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\n## User wallet\n\nFor each owner we deploy a ERC6900 wallet to schedule task and approve spending\nto user wallet.\n\nEach task type has its equivalent modular code to re-present its condition\nand their actual execution.\n\n## Aggregator\n\nAggregator accepts RPC request from client to submit Task Payload. Currently, aggregator is managed and run by Ava Protocol team.\n\nPeriodically, aggregator combine the task submission, update our internal\nstorage and a zkSNARK proof will be write back to our TaskManager contract.\n\nAggregator also accept task condition check result from operator, perform quorum\nand consensus check, then write the result back and flag that a task is good to\nrun.\n\n### Aggregator Address\n\nThe aggregator is currently run and managed by the Ava Protocol team. Depend on\ntestnet or mainnet, you would need to point your operator to the right address\nin the operator config file.\n\n#### Sepolia Testnet\n\n- aggregator-sepolia.avaprotocol.org:2206\n- [https://api-explorer-sepolia.avaprotocol.org/](https://api-explorer-sepolia.avaprotocol.org/)\n\n#### Mainnet\n\n- aggregator.avaprotocol.org:2206\n- [https://api-explorer.avaprotocol.org/](https://api-explorer.avaprotocol.org/)\n\n## Operators\n\nOperators communicates with aggregators through RPC. It requests task data from aggregator, it performs condition execution to check whether a task can be trigger. The result is then sent back to aggregator.\n\nFor task is ok to run, the operator will executed them. The detail of how task\nis triggering through our ERC6900 modular wallet will come soon.\n\n## Ava Protocol operator address\n\nCurrently, Ava Protocol has deployed our operator on the testnet. Community members can run their own operator and register for Ava Protocol AVS service, or they can delegate their tokens to the Ava Protocol operator.\n\n### Testnet\n\n- Ava Protocol's operator: [0x997e5d40a32c44a3d93e59fc55c4fd20b7d2d49d](https://sepolia.eigenlayer.xyz/operator/0x997e5d40a32c44a3d93e59fc55c4fd20b7d2d49d).\n\n### Mainnet\n\n- Ava Protocol's operator: [0xc6B87cc9e85b07365b6aBEfff061F237F7cf7Dc3](https://etherscan.io/address/0xc6B87cc9e85b07365b6aBEfff061F237F7cf7Dc3)\n\n## Telemetry Dashboard\n\nOperator that is connected to Ava Protocol aggregator can also check their\noperator on our telemetry dashboard as below\n\n### Testnet\n\nhttps://aggregator-sepolia.avaprotocol.org/telemetry\n\n### Mainnet\n\nhttps://aggregator.avaprotocol.org/telemetry\n\n## Branching Strategy\n\nAll feature branches and pull requests must target the `staging` branch. The `main` branch is only updated by merging `staging` → `main` after migration checks pass. Never open a PR directly against `main`.\n\n## Migration Guide\n\nBefore merging changes from `staging` to `main`, ensure any storage structure changes are properly migrated:\n\n1. **Check for Storage Changes**\n\n   ```bash\n   # First checkout staging branch\n   git checkout staging\n\n   # Compare with main to detect storage changes\n   go run scripts/compare_storage_structure.go main\n   ```\n\n2. **When Migration is Needed**\n\n   - Storage key format changes\n   - Non-backward-compatible data structure changes\n   - Required field additions (without `omitempty`)\n   - Field type changes\n   - Field removals\n   - **Protobuf message structure changes** (manual analysis required)\n   - **Trigger/node output format changes** (manual analysis required)\n\n3. **Migration Process**\n\n   **For Go Struct Changes (Automated):**\n\n   ```bash\n   # First checkout staging branch\n   git checkout staging\n\n   # Compare with main to detect storage changes\n   go run scripts/compare_storage_structure.go main\n\n   # If changes are detected, generate a migration file\n   go run scripts/migration/create_migration.go main\n   ```\n\n   **For Protobuf Changes (Manual Analysis Required):**\n\n   ```bash\n   # Compare protobuf changes between branches\n   git diff origin/main..staging protobuf/\n\n   # Analyze for breaking changes in:\n   # - Trigger output structures (e.g., timestamp -\u003e data field)\n   # - Node input/output formats (e.g., input field removal)\n   # - Manual trigger structure changes (boolean -\u003e ManualTrigger)\n   # - Contract ABI format changes (string -\u003e array)\n   ```\n\n4. **Migration Types**\n\n   **Automated Migration (Go Structs):**\n   The migration script will:\n\n   - Create a timestamped migration file in `./migrations`\n   - Include detected changes as comments\n   - Provide example migration code\n   - Add the migration to `Migrations` slice in `./migrations/migrations.go`\n\n   **Manual Migration (Protobuf Changes):**\n\n   - Create migration file manually following existing patterns\n   - Focus on data cleanup rather than backward compatibility\n   - Cancel/remove incompatible workflows and executions\n   - Clear cached data that needs regeneration\n\n5. **No Migration Needed For**\n\n   - Adding fields with `omitempty` JSON tags\n   - Runtime-only changes\n   - Backward-compatible modifications\n   - New optional protobuf fields\n\n6. **Active Migrations**\n\n   Current active migrations that will run on deployment:\n\n   - `20250603-183034-token-metadata-fields` - TokenMetadata struct field additions\n   - `20250128-120000-protobuf-structure-cleanup` - v1.9.6 protobuf structure cleanup\n     - Cancels workflows with incompatible trigger structures\n     - Removes executions with old trigger output formats\n     - Cleans cached data for regeneration\n     - **Impact**: Workflows with old manual triggers or loop/filter nodes will be canceled\n\n\u003e **Important**: Always run migrations before merging to `main`. For protobuf changes, manual analysis is required as the automated scripts may not detect all breaking changes.\n\n\u003e **v1.9.6 Note**: The protobuf structure cleanup migration will cancel workflows with incompatible structures. Ensure critical workflows are backed up before deployment.\n\n# Development guide\n\nView docs/Development.md\n\n## Testing\n\n### Test Configuration\n\nFor integration tests that require interaction with blockchain networks, you need to configure test credentials:\n\n#### Required Environment Variables\n\n```bash\n# Owner EOA wallet of testing smart wallets (must have funds on test networks)\nOWNER_EOA=\n\n# Test network endpoints  \nSEPOLIA_RPC=https://your-sepolia-rpc-endpoint\nSEPOLIA_BUNDLER_RPC=https://your-sepolia-bundler-endpoint\n```\n\n#### Security Notice\n\n⚠️ **SECURITY WARNING**: \n- Never use private keys containing real funds for testing\n- Use dedicated test keys funded only with testnet tokens\n- The fallback private key (all 1's) is insecure and only for development\n- Always configure proper test keys via environment variables or config files\n\n#### Test Key Setup\n\n1. Generate a new private key for testing (or use an existing test key)\n2. Fund the corresponding address with testnet tokens (Sepolia ETH, test USDC, etc.)\n3. Set the `OWNER_EOA` environment variable or add it to your config\n4. Ensure the key has sufficient balance for test transactions\n\n## Testing\n\n### Standard Tests\n\nThe Makefile includes two primary test configurations:\n\n```bash\n# Default test suite\ngo test -race -buildvcs -vet=off ./...\n\n# Verbose test output\ngo test -v -race -buildvcs ./...\n```\n\n### Enhanced Test Output\n\nFor improved test result formatting, use `gotestfmt`:\n\n1. Install the formatter:\n\n   ```bash\n   go install github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest\n   ```\n\n2. Run once in the current terminal session to make Bash scripts more robust and error-aware.\n\n   ```bash\n   set -euo pipefail\n   ```\n\n3. Run tests with formatted output:\n\n   Run all tests with complete output:\n\n   ```base\n   go test -v ./...\n   ```\n\n   or, run selected test cases:\n\n   ```bash\n   go test -json -run ^TestRestRequestErrorHandling$ ./... 2\u003e\u00261 | gotestfmt --hide=all\n   ```\n\n   The `--hide=all` flag suppresses output for skipped and successful tests, showing only failures. For more output configuration options, see the [gotestfmt documentation](https://github.com/GoTestTools/gotestfmt?tab=readme-ov-file#how-do-i-make-the-output-less-verbose).\n\n=======\n\n## Linting and Code Quality\n\n### Running the linter\n\n```bash\n# Install golangci-lint\ncurl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2\n\n# Run the linter\ngolangci-lint run ./...\n\n# Or use the Makefile target\nmake audit\n```\n\n### Best practices for running linters\n\n- Run linters before committing code to catch issues early\n- Configure your IDE to run linters on save for immediate feedback\n- Include linting in CI/CD pipelines to enforce code quality standards\n- Fix linting issues as they arise rather than letting them accumulate\n\n### Get all Github CI/CD failures\n\nThe script is configured in Makefile, so run the below command to retrieve failed tests.\n`make cicd-failed RUN_ID=16632516768`\n\nExample output:\n\n```\nmake cicd-failed RUN_ID=16632516768\n--- FAIL: TestEventTriggerQueriesBasedMultipleContracts (0.07s)\n--- FAIL: TestEventTriggerQueriesBasedMultipleContracts/Transfer_FROM_target_address_(any_token) (0.00s)\n--- FAIL: TestEventTriggerQueriesBasedMultipleContracts/Transfer_TO_target_address_(any_token) (0.00s)\n```\n\n## Dependencies\n\n## Update Protobuf Definitions\n\nWhen you modify any `.proto` files (primarily `protobuf/avs.proto` or `protobuf/node.proto`), you need to regenerate the corresponding Go bindings.\n\n### Prerequisites\n\n1.  **Install `protoc` (the protobuf compiler):**\n    If you don't have it, download it from the [protobuf releases page](https://github.com/protocolbuffers/protobuf/releases) and ensure it's in your system's `PATH`.\n\n2.  **Install Go plugins for `protoc`:**\n    These commands will install the necessary Go code generators for protobuf messages and gRPC services. Ensure your `$GOPATH/bin` or `$HOME/go/bin` is in your system `PATH`.\n    ```bash\n    go install google.golang.org/protobuf/cmd/protoc-gen-go@latest\n    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest\n    ```\n\n### Generation Command\n\nAfter installing the prerequisites, run the following Make target from the project root:\n\n```bash\nmake protoc-gen\n```\n\n### Expected File Structure \u0026 Go Package\n\n- **Proto source files:** Reside in the `protobuf/` directory (e.g., `protobuf/avs.proto`, `protobuf/node.proto`).\n- **`go_package` option:** Both `avs.proto` and `node.proto` use `option go_package = \"github.com/AvaProtocol/EigenLayer-AVS/protobuf;avsproto\";`.\n  - This directs `protoc-gen-go` to generate files that will be part of the Go package aliased as `avsproto`.\n  - The import path for this package in your Go code will be `github.com/AvaProtocol/EigenLayer-AVS/protobuf` (assuming `github.com/AvaProtocol/EigenLayer-AVS` is your module name from `go.mod`).\n- **Generated Go files:** The `make protoc-gen` command is configured (via `--go_out=.` and the `go_package` option) to place the generated `*.pb.go` and `*_grpc.pb.go` files directly into the `protobuf/` directory.\n  - Example: `protobuf/avs.pb.go`, `protobuf/node.pb.go`.\n  - All these generated files will contain the Go package declaration: `package avsproto`.\n\n### Using the Generated Code in Go\n\nTo use the generated types and gRPC clients/servers in your Go code, import the package as follows:\n\n```go\nimport (\n    // ... other imports\n    avspb \"github.com/AvaProtocol/EigenLayer-AVS/protobuf\" // Use a suitable alias like avspb\n)\n\nfunc main() {\n    req := \u0026avspb.IdReq{Id: \"test-id\"}\n    // ... use other types like avspb.Task, avspb.AggregatorClient, etc.\n}\n```\n\n**Important:** If you change the `go_package` option in the `.proto` files or the output paths in the `Makefile`, you will likely need to update the import paths in your Go codebase accordingly.\n\n## Testing Bundler Connectivity\n\nThe Ava Protocol uses ERC-4337 bundlers for smart wallet transactions. You can test bundler connectivity using the following commands:\n\n### Basic Connectivity Test\n\nTest if the bundler is responding:\n\n```bash\ncurl -X POST https://bundler-sepolia.avaprotocol.org/rpc?apikey= \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}'\n```\n\n**Expected Response:**\n```json\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xaa36a7\"}\n```\n\n### ERC-4337 EntryPoint Support\n\nCheck which EntryPoint contracts the bundler supports:\n\n```bash\ncurl -X POST https://bundler-sepolia.avaprotocol.org/rpc?apikey= \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_supportedEntryPoints\",\"params\":[],\"id\":1}'\n```\n\n**Expected Response:**\n```json\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [\"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\", \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\", \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\"]}\n```\n\n### Gas Estimation Test\n\nTest UserOp gas estimation (will fail for non-deployed accounts, which is expected):\n\n```bash\ncurl -X POST https://bundler-sepolia.avaprotocol.org/rpc?apikey= \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_estimateUserOperationGas\",\"params\":[{\"sender\":\"0x69bb9251D3c2066DcF7aDAFe3E7CE36E76990617\",\"nonce\":\"0x0\",\"initCode\":\"0x\",\"callData\":\"0x\",\"callGasLimit\":\"0x0\",\"verificationGasLimit\":\"0x0\",\"preVerificationGas\":\"0x0\",\"maxFeePerGas\":\"0x0\",\"maxPriorityFeePerGas\":\"0x0\",\"paymasterAndData\":\"0x\",\"signature\":\"0x\"},\"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\"],\"id\":1}'\n```\n\n**Expected Response (for non-deployed account):**\n```json\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"error\": {\"code\": -32500, \"message\": \"AA20 account not deployed\"}}\n```\n\n### User Operation Debugging Scripts\n\nQuery and debug user operations using the provided scripts:\n\n```bash\n# Query specific user operation by hash\n./scripts/query_userop.sh 0x1234567890abcdef... [status|receipt|both]\n\n# Debug bundler connectivity and health\n./scripts/bundler_debug.sh\n\n# Search recent user operations (requires SEPOLIA_RPC)\nexport SEPOLIA_RPC=https://sepolia.infura.io/v3/YOUR_KEY\n./scripts/search_recent_userops.sh [sender_address] [blocks_back]\n```\n\n### Troubleshooting\n\n- **Connection refused**: Check network connectivity and firewall settings\n- **401 Unauthorized**: Verify the API key in the bundler URL\n- **Parse error**: Check JSON formatting and Content-Type header\n- **AA20 account not deployed**: Normal for testing with random addresses\n- **Method not found**: Bundler may not support that specific ERC-4337 method\n\n## Getting started\n\nComing soon\n\n## Contract address\n\n### Holesky Testnet (Deprecated)\n\n| Name                   | Address                                                                                                                         |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| ProxyAdmin             | [`0x26CF7A7DF7d1E00D83A5Ca24385f697a3ca4577d`](https://holesky.etherscan.io/address/0x26CF7A7DF7d1E00D83A5Ca24385f697a3ca4577d) |\n| ServiceManager         | [`0xEA3E82F9Ae371A6a372A6DCffB1a9bD17e0608eF`](https://holesky.etherscan.io/address/0xEA3E82F9Ae371A6a372A6DCffB1a9bD17e0608eF) |\n| RegistryCoordinator    | [`0x90c6d6f2A78d5Ce22AB8631Ddb142C03AC87De7a`](https://holesky.etherscan.io/address/0x90c6d6f2A78d5Ce22AB8631Ddb142C03AC87De7a) |\n| BLSApkRegistry         | [`0x6752F8BeeE5BF45c9d11FDBC4F8aFfF879925585`](https://holesky.etherscan.io/address/0x6752F8BeeE5BF45c9d11FDBC4F8aFfF879925585) |\n| IndexRegistry          | [`0x298a5d3C8F8Db30E8292C9e2BF92292de469C8FF`](https://holesky.etherscan.io/address/0x298a5d3C8F8Db30E8292C9e2BF92292de469C8FF) |\n| OperatorStateRetriever | [`0xb7bb920538e038DFFEfcB55caBf713652ED2031F`](https://holesky.etherscan.io/address/0xb7bb920538e038DFFEfcB55caBf713652ED2031F) |\n| PauserRegistry         | [`0x3A8ea6e4202CdDe4a9e0cCE19c4Dc1739ba2cF0b`](https://holesky.etherscan.io/address/0x3A8ea6e4202CdDe4a9e0cCE19c4Dc1739ba2cF0b) |\n| StakeRegistry          | [`0x7BacD5dd5A7C3acf8bf1a3c88fB0D00B68EE626A`](https://holesky.etherscan.io/address/0x7BacD5dd5A7C3acf8bf1a3c88fB0D00B68EE626A) |\n| ApConfig               | [`0xb8abbb082ecaae8d1cd68378cf3b060f6f0e07eb`](https://holesky.etherscan.io/address/0xb8abbb082ecaae8d1cd68378cf3b060f6f0e07eb) |\n\n### Sepolia Testnet\n| Name                   | Address                                                                                                                         |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| ProxyAdmin             | [`0x122c2D0Af2042ec0a6676d4dFd4d0c66dc40DDcf`](https://sepolia.etherscan.io/address/0x122c2D0Af2042ec0a6676d4dFd4d0c66dc40DDcf) |\n| ServiceManager         | [`0x80D492e1002F9C24b26179a024B8aA871fEbBC9D`](https://sepolia.etherscan.io/address/0x80D492e1002F9C24b26179a024B8aA871fEbBC9D) |\n| RegistryCoordinator    | [`0xcA95381802FD1398d5BF2D01243210cFb3a2b3BD`](https://sepolia.etherscan.io/address/0xcA95381802FD1398d5BF2D01243210cFb3a2b3BD) |\n| BLSApkRegistry         | [`0xC7fe896a9f0529b0e2B8193EBaf911BcD9d84A3F`](https://sepolia.etherscan.io/address/0xC7fe896a9f0529b0e2B8193EBaf911BcD9d84A3F) |\n| IndexRegistry          | [`0xdb8771619A7c2b9050CE66321A0652BC889399c2`](https://sepolia.etherscan.io/address/0xdb8771619A7c2b9050CE66321A0652BC889399c2) |\n| OperatorStateRetriever | [`0x070E0ABE8407eb4727fC7C5284bdc1e5E5CBf605`](https://sepolia.etherscan.io/address/0x070E0ABE8407eb4727fC7C5284bdc1e5E5CBf605) |\n| PauserRegistry         | [`0x3b36CE97b7fdf2571354679130a80F9E1450679b`](https://sepolia.etherscan.io/address/0x3b36CE97b7fdf2571354679130a80F9E1450679b) |\n| StakeRegistry          | [`0x6dFAdB7E0ff7CAC8682f9C733890150210206E05`](https://sepolia.etherscan.io/address/0x6dFAdB7E0ff7CAC8682f9C733890150210206E05) |\n| ApConfig               | [`0xFf2E98967A8607F9Acd5CC9024cC5dE5DF0D60a3`](https://sepolia.etherscan.io/address/0xFf2E98967A8607F9Acd5CC9024cC5dE5DF0D60a3) |\n\n### Ethereum Mainnet\n\n| Name                   | Address                                                                                                                 |\n| ---------------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| ProxyAdmin             | [`0x5989934D31f7f397511f105B7E4175a06B7A517F`](https://etherscan.io/address/0x5989934D31f7f397511f105B7E4175a06B7A517F) |\n| ServiceManager         | [`0x18343Aa10e3D2F3A861e5649627324aEAD987Adf`](https://etherscan.io/address/0x18343Aa10e3D2F3A861e5649627324aEAD987Adf) |\n| RegistryCoordinator    | [`0x8DE3Ee0dE880161Aa0CD8Bf9F8F6a7AfEeB9A44B`](https://etherscan.io/address/0x8DE3Ee0dE880161Aa0CD8Bf9F8F6a7AfEeB9A44B) |\n| BLSApkRegistry         | [`0xB58687fF303C8e92C28a484342755d3228081d45`](https://etherscan.io/address/0xB58687fF303C8e92C28a484342755d3228081d45) |\n| IndexRegistry          | [`0xc6A464e39d4fA5013D61295501c7cCd050d76612`](https://etherscan.io/address/0xc6A464e39d4fA5013D61295501c7cCd050d76612) |\n| OperatorStateRetriever | [`0xb3af70D5f72C04D1f490ff49e5aB189fA7122713`](https://etherscan.io/address/0xb3af70D5f72C04D1f490ff49e5aB189fA7122713) |\n| PauserRegistry         | [`0xeec585186c37c517030ba371deac5c17e728c135`](https://etherscan.io/address/0xeec585186c37c517030ba371deac5c17e728c135) |\n| StakeRegistry          | [`0x363b3604fE8c2323a98c00906115c8b87a512a12`](https://etherscan.io/address/0x363b3604fE8c2323a98c00906115c8b87a512a12) |\n| TaskManager            | [`0x940f62f75cbbbd723d37c9171dc681dfba653b49`](https://etherscan.io/address/0x940f62f75cbbbd723d37c9171dc681dfba653b49) |\n| ApConfig               | [`0x9c02dfc92eea988902a98919bf4f035e4aaefced`](https://etherscan.io/address/0x9c02dfc92eea988902a98919bf4f035e4aaefced) |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favaprotocol%2Feigenlayer-avs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favaprotocol%2Feigenlayer-avs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favaprotocol%2Feigenlayer-avs/lists"}