{"id":17478503,"url":"https://github.com/automata-network/multi-prover-avs","last_synced_at":"2025-03-25T12:32:45.869Z","repository":{"id":232917971,"uuid":"774765910","full_name":"automata-network/multi-prover-avs","owner":"automata-network","description":"Automata Multi-Prover AVS","archived":false,"fork":false,"pushed_at":"2025-01-17T01:55:00.000Z","size":9460,"stargazers_count":11,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-20T05:04:12.286Z","etag":null,"topics":["avs","eigenlayer","multi-prover"],"latest_commit_sha":null,"homepage":"https://ata.network","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/automata-network.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"audits/PeckShield-Audit-Report-Automata-MultipleProverAVS-v1.0.pdf","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-20T06:24:56.000Z","updated_at":"2025-03-02T17:50:25.000Z","dependencies_parsed_at":"2024-04-19T02:41:49.443Z","dependency_job_id":"7570da60-24a2-4a8a-8204-43ad5a1edf90","html_url":"https://github.com/automata-network/multi-prover-avs","commit_stats":{"total_commits":78,"total_committers":4,"mean_commits":19.5,"dds":"0.47435897435897434","last_synced_commit":"5a9e15cfbc1bea69e064888a4d77522e8ac6c8a9"},"previous_names":["automata-network/multi-prover-avs"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automata-network%2Fmulti-prover-avs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automata-network%2Fmulti-prover-avs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automata-network%2Fmulti-prover-avs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automata-network%2Fmulti-prover-avs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/automata-network","download_url":"https://codeload.github.com/automata-network/multi-prover-avs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245462850,"owners_count":20619572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["avs","eigenlayer","multi-prover"],"created_at":"2024-10-18T20:18:35.148Z","updated_at":"2025-03-25T12:32:45.818Z","avatar_url":"https://github.com/automata-network.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Table of Contents\n- [Table of Contents](#table-of-contents)\n- [About Multi-Prover AVS](#about-multi-prover-avs)\n- [Directory Structure](#directory-structure)\n- [AVS Task Description](#avs-task-description)\n- [AVS Architecture](#avs-architecture)\n- [AVS Workflow](#avs-workflow)\n- [TEE Committee and Quorum](#tee-committee-and-quorum)\n- [Deployments](#deployments)\n  - [Holesky Testnet Deployments](#holesky-testnet-deployments)\n  - [Mainnet Deployment](#mainnet-deployment)\n- [Compile From Source](#compile-from-source)\n  - [Operator](#operator)\n  - [Aggregator](#aggregator)\n\n## About Multi-Prover AVS\nThe Automata Multi-Prover AVS target to build a robust, fortified prover system through the use of diverse, decentralized TEE committees.\n![Automata Multi-Prover AVS Design](/assets/multiprover-design.png)\n\nRead this [blog](https://atanetwork.notion.site/Multi-Prover-AVS-with-TEE-545319c42885489196142d966f0ede86) to understand more about the Multi-Prover AVS.\n\n## Directory Structure\n\u003cpre\u003e\n├── \u003ca href=\"./contracts/\"\u003econtracts\u003c/a\u003e: Solidity contracts, including the AVS contracts and the attestation layer contracts.\n│ ├── \u003ca href=\"./contracts/dcap-v3-attestation/\"\u003edcap-v3-attestation\u003c/a\u003e: On-chain verification library for Dcap attestation of Intel SGX.\n│ ├── \u003ca href=\"./contracts/src/\"\u003esrc\u003c/a\u003e: Source files for AVS contracts.\n│ └── \u003ca href=\"./contracts/test/\"\u003etest\u003c/a\u003e: Tests for smart contracts.\n├── \u003ca href=\"./operator/\"\u003eoperator\u003c/a\u003e: The operator implementation.\n├── \u003ca href=\"./aggregator/\"\u003eaggregator\u003c/a\u003e: The aggregator implementation.\n├── \u003ca href=\"https://github.com/automata-network/sgx-prover/tree/avs\"\u003esgx-prover\u003c/a\u003e: the sgx version of TEE prover.\n\u003c/pre\u003e\n\n## AVS Task Description\nTask definition: A state transition or computational process seeking to leverage the independent execution within a Trusted Execution Environment (TEE) to ascertain its correctness.\n\n```solidity\nstruct StateHeader {\n    uint256 identifier;\n    bytes metadata;\n    bytes state;\n}\n```\nThis is the structure of the state header submitted ty provers, below is the detailed explaination:\n- **identifier**: identifier of the handled task, it can be used to distinguish different kinds of tasks and used to calculator the contribution of each operators\n- **metadata**: metadata that describe the specific task, for example `keccak256(abi.encodePacked(chainID, blockNumber))` is the metadata for the task to prove blockchain state at specific block height\n- **state**: the final state produced by the TEE prover, it can be either a root state of blockchain, or statement proved by a zk circuit\n\n## AVS Architecture\nThe architecture of the AVS contains:\n- [Eigenlayer core contracts](https://github.com/Layr-Labs/eigenlayer-contracts)\n- AVS contracts\n    - ServiceManager which allow operators to submit tasks, reward and slash logic will be added in the future\n- Attestation contracts\n    - Manage the register/deregister and livenness of various TEE provers, it will verify attestation of different TEE platforms such as Intel SGX, AMD SEV, ARM TrustZone and so on\n    - TEEProverRegister is the interface for the attestation layer used by the operators and aggregator\n- Aggregator\n    - Aggregate the BLS signatures from operators and submit the aggregated state to AVS\n    - Interact with the Automata attestation layer to check the validity of each prover(operator), those who failed to pass the attestation verification or liveness challenge will be rejected to handle tasks until they are valid again.\n- Operator\n    - Fetch state proofs from TEE prover and submit it to the aggregator\n- TEE prover\n    - TEE prover that prove the final state of a given task, for example, a prover of zk-rollup L2 will execute blocks inside TEE and produce the root state at specific block\n\n## AVS Workflow\nBelow is a detailed diagram of the workflow\n\n```mermaid\nsequenceDiagram\n  autonumber\n    participant O as Operator\n    participant A as Aggregator\n    participant EC as Eigenlayer Contracts\n    participant M as Multi-prover AVS\n    participant L as TEE Liveness Contract\n    participant AC as Attestation Contracts\n \nNote over O,L: Operator registration\nO-\u003e\u003eEC: Restake and register to Multi-prover AVS\nO-\u003e\u003eL: Operator Liveness\nNote over O,AC: Operator Liveness (Periodically)\nloop Every liveness cycle\nO-\u003e\u003eO: Generate Attestation Report\nO-\u003e\u003eL: Submit Attesatation Report with pubkey(submitLivenessProof)\nL-\u003e\u003e+AC: Verify Attestation Report(verifyAttestation)\nAC-\u003e\u003eAC: Verify MrEncalve and MrSigner\nAC-\u003e\u003eAC: Verify QE Report\nAC-\u003e\u003eAC: Verify Quote CertChain\nAC-\u003e\u003eAC: Verify TCB\nAC--\u003e\u003e-L: Return reportData(pubkey)\nL-\u003e\u003eL: Mark the operator(pubkey) as attested within the liveness cycle\nend\n \nNote over O,L: Proving state\nO--\u003e\u003eO: Fetch task and calculate inside TEE\nO-\u003e\u003eA: Provide state and signature(submitTask)\nA--\u003e\u003eEC: Fetch pubkey by OperaterId\nA-\u003e\u003eL: Fetch operator's validity (verifyLivenessProof)\nL--\u003e\u003eA: Operator's validity\nalt Is Valid TEE Prover\nA--\u003e\u003eA: Wait and aggregate signatures\nA-\u003e\u003eM: Submit state and aggregated signatures\nelse Not Valid TEE Prover\nA--\u003e\u003eO: Reject\nend\n```\n\nComponents:\n- [Operator](./operator)\n- [Aggregator](./aggregator)\n- [MultiProver AVS](./contracts/src/core/MultiProverServiceManager.sol)\n- [TEE Liveness Contract](./contracts/src/core/TEELivenessVerifier.sol)\n- [Attestation Contract](https://github.com/automata-network/sgx-prover/blob/avs/verifier/contracts/AutomataDcapV3Attestation.sol)\n\nThe workflow is divided into two parts:\n- Setup\n    - Follow the [Eigenlayer's doc](https://docs.eigenlayer.xyz/eigenlayer/overview) to stake and register as operator of Multi-prover AVS\n    - Generate attestation and register as TEE prover, attestation and its generating process differs depending on the TEE technology. For example, [dcap-v3-attestation](./contracts/dcap-v3-attestation/) is the contracts of verifying Dcap attestation of Intel SGX\n- Working\n    - Except what operators should do to handle tasks, they must complete liveness challenge periodically, otherwise they will be treated as invalid and their submission will be rejected by the aggregator\n    - Operators fetch new task and finish the calculation inside TEE\n    - Operators sign the final state and send it together with signature to aggregator\n    - Aggregator will fetch operator's validity before accepting its submission\n    - Aggregator aggregate all the BLS signature and submit to the AVS service manager\n\n## TEE Committee and Quorum\n![Committee and Quorum](./assets/committee-and-quorum.png)\n\n**TEE Committee** is a set of quorum that is responsible to handle a specific type of task. For example, proving the root state of Zk-Rollup at a particular block height. Operators do not need to actively choose a committee, but automatically belong to a committee by joining quorums. The introduction of `TEE Committee` facilitates a more organized structuring of operators and tasks. And lays the groundwork for future enhancements, including the rewarding mechanism and constraints of stake distribution across quorums.\n\nThe concept of a **TEE Quorum** aligns with the quorum definition utilized by Eigenlayer, but each quorum is associated with a TEE platform, such as Intel SGX. Each quorum belongs to a committee, operators can choose to join any quorum, But only the votes from operators possessing the requisite attestation will be accepted by the aggregator.\n\n## Deployments\n### Holesky Testnet Deployments\n| Name                      | Proxy                                                                                                                           |\n| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| MultiProverServiceManager | [`0x4665Af665df5703445645D243f0FD63eD3b9D132`](https://holesky.etherscan.io/address/0x4665Af665df5703445645D243f0FD63eD3b9D132) |\n| RegistryCoordinator       | [`0x62c715575cE3Ad7C5a43aA325b881c70564f2215`](https://holesky.etherscan.io/address/0x62c715575cE3Ad7C5a43aA325b881c70564f2215) |\n| StakeRegistry             | [`0x5C7BbAfA3d5A3Fa0b592cDCF4b7B52261FaA99A8`](https://holesky.etherscan.io/address/0x5C7BbAfA3d5A3Fa0b592cDCF4b7B52261FaA99A8) |\n| BlsApkRegistry            | [`0x2b6C2584760eDbcEC42391862f97dBB872b5e2Eb`](https://holesky.etherscan.io/address/0x2b6C2584760eDbcEC42391862f97dBB872b5e2Eb) |\n| IndexRegistry             | [`0x158583f023ca440e79F199f037aa8b53b198F500`](https://holesky.etherscan.io/address/0x158583f023ca440e79F199f037aa8b53b198F500) |\n| OperatorStateRetriever    | [`0xbfd43ac0a19c843e44491c3207ea13914818E214`](https://holesky.etherscan.io/address/0xbfd43ac0a19c843e44491c3207ea13914818E214) |\n| Holesky Attestation Layer | [`0x2E8628F6000Ef85dea615af6Da4Fd6dF4fD149e6`](https://holesky.etherscan.io/address/0x2E8628F6000Ef85dea615af6Da4Fd6dF4fD149e6) |\n| Automata Attestation Layer | [`0xf91bFe9EB9F2B3c4Ad339168a42542Ae5f440991`](https://explorer-testnet.ata.network/address/0xf91bFe9EB9F2B3c4Ad339168a42542Ae5f440991)    |\n\n\nPlease visit the [Operator setup](https://github.com/automata-network/multiprover-avs-operator-setup) repository if you are interested in joining the Multi-Prover AVS on Holesky testnet. The onboarding guide is available [here](https://github.com/automata-network/multiprover-avs-operator-setup/tree/main/holesky).\n\n### Mainnet Deployment\n| Name                       | Proxy                                                                                                                              |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| MultiProverServiceManager  | [`0xE5445838C475A2980e6a88054ff1514230b83aEb`](https://etherscan.io/address/0xE5445838C475A2980e6a88054ff1514230b83aEb)            |\n| RegistryCoordinator        | [`0x414696E4F7f06273973E89bfD3499e8666D63Bd4`](https://etherscan.io/address/0x414696E4F7f06273973E89bfD3499e8666D63Bd4)            |\n| StakeRegistry              | [`0x4A4EC1631aE79699be7dCFD3fCA395Ab89c5eFe9`](https://etherscan.io/address/0x4A4EC1631aE79699be7dCFD3fCA395Ab89c5eFe9)            |\n| BlsApkRegistry             | [`0x61D25c9b943b893747Bd33F92B62Ec8270222e6F`](https://etherscan.io/address/0x61D25c9b943b893747Bd33F92B62Ec8270222e6F)            |\n| IndexRegistry              | [`0x16552d7863560Ee6903F092A901A9124a5013085`](https://etherscan.io/address/0x16552d7863560Ee6903F092A901A9124a5013085)            |\n| OperatorStateRetriever     | [`0x91246253d3Bff9Ae19065A90dC3AB6e09EefD2B6`](https://etherscan.io/address/0x91246253d3Bff9Ae19065A90dC3AB6e09EefD2B6)            |\n| Optimism Attestation Layer | [`0x8E26055388347A2f4A7a112A7210CcC88A1c2F30`](https://optimistic.etherscan.io/address/0x8E26055388347A2f4A7a112A7210CcC88A1c2F30) |\n| Automata Attestation Layer | [`0xC9D1Fe39aC6259e66B3Be0e9DE5b33F8bbCa350F`](https://explorer.ata.network/address/0xC9D1Fe39aC6259e66B3Be0e9DE5b33F8bbCa350F)    |\n\nPlease visit the [Operator setup](https://github.com/automata-network/multiprover-avs-operator-setup) repository if you are interested in joining the Multi-Prover AVS on Ethereum mainnet. The onboarding guide is available [here](https://github.com/automata-network/multiprover-avs-operator-setup/tree/main/mainnet).\n\n## Compile From Source\n\n### Operator\n\n```\ngo build -o out/operator ./cmd/operator\n```\n\n### Aggregator\n\n```\ngo build -o out/aggregator ./cmd/aggregator\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomata-network%2Fmulti-prover-avs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fautomata-network%2Fmulti-prover-avs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomata-network%2Fmulti-prover-avs/lists"}