{"id":16063085,"url":"https://github.com/gnosisguild/enclave","last_synced_at":"2026-02-06T18:20:23.543Z","repository":{"id":241424985,"uuid":"801339558","full_name":"gnosisguild/enclave","owner":"gnosisguild","description":"Enclave is an open-source protocol for Encrypted Execution Environments (E3).","archived":false,"fork":false,"pushed_at":"2025-06-17T11:00:21.000Z","size":12705,"stargazers_count":25,"open_issues_count":88,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-17T11:30:37.033Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.enclave.gg/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnosisguild.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2024-05-16T03:32:19.000Z","updated_at":"2025-06-11T10:22:54.000Z","dependencies_parsed_at":"2024-06-24T13:05:33.922Z","dependency_job_id":"6ea74939-bc0e-4777-9e94-bbe8d3a1165b","html_url":"https://github.com/gnosisguild/enclave","commit_stats":null,"previous_names":["gnosisguild/enclave"],"tags_count":38,"template":false,"template_full_name":"PaulRBerg/hardhat-template","purl":"pkg:github/gnosisguild/enclave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnosisguild%2Fenclave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnosisguild%2Fenclave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnosisguild%2Fenclave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnosisguild%2Fenclave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnosisguild","download_url":"https://codeload.github.com/gnosisguild/enclave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnosisguild%2Fenclave/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260953753,"owners_count":23088099,"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":[],"created_at":"2024-10-09T05:01:08.833Z","updated_at":"2026-02-06T18:20:23.538Z","avatar_url":"https://github.com/gnosisguild.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg src=\"./enclave.png\" alt=\"Enclave\" width=\"100%\"\u003e\n  \u003c/picture\u003e\n\n[![Docs][docs-badge]][docs] [![Github Actions][gha-badge]][gha] [![Hardhat][hardhat-badge]][hardhat]\n[![License: LGPL v3][license-badge]][license]\n\n\u003c/div\u003e\n\n# Enclave\n\nThis is the monorepo for Enclave, an open-source protocol for Collaborative Confidential Compute.\nEnclave leverages the combination of Fully Homomorphic Encryption (FHE), Zero Knowledge Proofs\n(ZKPs), and Multi-Party Computation (MPC) to enable Encrypted Execution Environments (E3) with\nintegrity and privacy guarantees rooted in cryptography and economics, rather than hardware and\nattestations.\n\n## Quick Start\n\nFollow instructions in the [quick start][quick-start] section of the [Enclave docs][docs].\n\nSee the [CRISP example][crisp] for a fully functioning example application.\n\n## Getting Help\n\nJoin the Enclave [Telegram group][telegram].\n\n## Contributing\n\nSee [CONTRIBUTING.md][contributing].\n\n## Development\n\nThis section covers the essential commands for setting up and working with the Enclave codebase\nlocally.\n\n```bash\n# Install dependencies\npnpm i\n\n# Build the project\npnpm build\n\n# Clean build artifacts\npnpm clean\n```\n\n### Testing\n\n**⚠️ Important:** Always run tests through pnpm scripts, not directly via `cargo test` or other\nbuild tools. The pnpm scripts ensure necessary setup steps are executed (e.g., building required\nbinaries, setting up test environments) that may be skipped when running tests directly.\n\n#### Test Scripts\n\nThe monorepo provides several test scripts for different components:\n\n- **`pnpm test`** - Runs all tests across the entire monorepo:\n  - EVM/Smart contract tests (`evm:test`)\n  - Rust crate tests (`rust:test`)\n  - SDK tests (`sdk:test`)\n  - Noir circuit tests (`noir:test`)\n\n- **`pnpm rust:test`** - Runs all Rust crate tests in the `crates/` directory. This script runs\n  tests for all crates in the workspace, not just ciphernode-related crates.\n\n- **`pnpm evm:test`** - Runs tests for the EVM smart contracts in `packages/enclave-contracts`.\n\n- **`pnpm sdk:test`** - Runs tests for the TypeScript SDK in `packages/enclave-sdk`.\n\n- **`pnpm noir:test`** - Runs tests for Noir circuits in the `circuits/` directory using\n  `nargo test`.\n\n- **`pnpm test:integration`** - Runs integration tests from `tests/integration/`. These tests may\n  require prebuilt binaries and can be run with `--no-prebuild` if binaries are already available.\n\n#### Running Individual Test Suites\n\n```bash\n# Run only Rust crate tests\npnpm rust:test\n\n# Run only EVM/smart contract tests\npnpm evm:test\n\n# Run only SDK tests\npnpm sdk:test\n\n# Run only Noir circuit tests\npnpm noir:test\n\n# Run only integration tests\npnpm test:integration\n\n# Run integration tests without prebuild step (if binaries already exist)\npnpm test:integration --no-prebuild\n```\n\n### Contributors\n\n\u003c!-- readme: contributors -start --\u003e\n\u003ctable\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/ryardley\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/1256409?v=4\" width=\"100;\" alt=\"ryardley\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eгλ\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/auryn-macmillan\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/8453294?v=4\" width=\"100;\" alt=\"auryn-macmillan\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eAuryn Macmillan\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/hmzakhalid\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/36852564?v=4\" width=\"100;\" alt=\"hmzakhalid\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eHamza Khalid\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/samepant\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/6718506?v=4\" width=\"100;\" alt=\"samepant\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003esamepant\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/ctrlc03\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/93448202?v=4\" width=\"100;\" alt=\"ctrlc03\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003ectrlc03\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/cristovaoth\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/12870300?v=4\" width=\"100;\" alt=\"cristovaoth\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eCristóvão\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/nginnever\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/7103153?v=4\" width=\"100;\" alt=\"nginnever\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eNathan Ginnever\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/0xjei\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/20580910?v=4\" width=\"100;\" alt=\"0xjei\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eGiacomo\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/cedoor\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/11427903?v=4\" width=\"100;\" alt=\"cedoor\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eCedoor\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/ozgurarmanc\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/94117770?v=4\" width=\"100;\" alt=\"ozgurarmanc\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eArmanc\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/Subhasish-Behera\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/92573882?v=4\" width=\"100;\" alt=\"Subhasish-Behera\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eSUBHASISH BEHERA\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003ctbody\u003e\n\u003c/table\u003e\n\u003c!-- readme: contributors-end --\u003e\n\n## Minimum Rust version\n\nThis workspace's minimum supported rustc version is 1.86.0.\n\n## Architecture\n\nEnclave employs a modular architecture involving numerous actors and participants. The sequence\ndiagram below offers a high-level overview of the protocol, but necessarily omits most detail.\n\n```mermaid\nsequenceDiagram\n    participant Users\n    participant Enclave\n    participant CiphernodeRegistry\n    participant E3Program\n    participant ComputeProvider\n    participant DecryptionVerifier\n\n    Users-\u003e\u003eEnclave: request(parameters)\n    Enclave-\u003e\u003eE3Program: validate(e3ProgramParams)\n    Enclave-\u003e\u003eComputeProvider: validate(computeProviderParams)\n    ComputeProvider--\u003e\u003eEnclave: decryptionVerifier\n    Enclave-\u003e\u003eCiphernodeRegistry: requestCommittee(e3Id, seed, threshold)\n    CiphernodeRegistry--\u003e\u003eEnclave: success\n    Enclave--\u003e\u003eUsers: e3Id, E3 struct\n\n    Users-\u003e\u003eEnclave: activate(e3Id)\n    Enclave-\u003e\u003eCiphernodeRegistry: committeePublicKey(e3Id)\n    CiphernodeRegistry--\u003e\u003eEnclave: publicKey\n    Enclave-\u003e\u003eEnclave: Set expiration and committeePublicKey\n    Enclave--\u003e\u003eUsers: success\n\n    Users-\u003e\u003eEnclave: publishInput(e3Id, data)\n    Enclave-\u003e\u003eE3Program: validateInput(msg.sender, data)\n    E3Program--\u003e\u003eEnclave: input, success\n    Enclave-\u003e\u003eEnclave: Store input\n    Enclave--\u003e\u003eUsers: success\n\n    Users-\u003e\u003eEnclave: publishCiphertextOutput(e3Id, data)\n    Enclave-\u003e\u003eDecryptionVerifier: verify(e3Id, data)\n    DecryptionVerifier--\u003e\u003eEnclave: output, success\n    Enclave-\u003e\u003eEnclave: Store ciphertextOutput\n    Enclave--\u003e\u003eUsers: success\n\n    Users-\u003e\u003eEnclave: publishPlaintextOutput(e3Id, data)\n    Enclave-\u003e\u003eE3Program: verify(e3Id, data)\n    E3Program--\u003e\u003eEnclave: output, success\n    Enclave-\u003e\u003eEnclave: Store plaintextOutput\n    Enclave--\u003e\u003eUsers: success\n```\n\n## 🚀 Release Process\n\n### Overview\n\nEnclave uses a unified versioning strategy where all packages (Rust crates and npm packages) share\nthe same version number. Releases are triggered by git tags and follow semantic versioning.\n\n### Quick Release\n\n```bash\n# One command to release! 🎉\npnpm bump:versions 1.0.0\n\n# This automatically:\n# - Bumps all versions\n# - Generates changelog\n# - Commits changes\n# - Creates tag\n# - Pushes to GitHub\n# - Triggers release workflow\n```\n\n### Detailed Release Workflow\n\n#### 1. Development Phase\n\nDevelopers work on features and fixes, committing with\n[conventional commits](https://www.conventionalcommits.org/):\n\n```bash\ngit commit -m \"feat: add new encryption module\"\ngit commit -m \"fix: resolve memory leak in SDK\"\ngit commit -m \"docs: update API documentation\"\ngit commit -m \"BREAKING CHANGE: redesign configuration API\"\n```\n\n#### 2. Release Execution\n\nWhen ready to release, maintainers run a single command:\n\n```bash\n# For stable release\npnpm bump:versions 1.0.0\n\n# For pre-release\npnpm bump:versions 1.0.0-beta.1\n```\n\nThis command automatically:\n\n- ✅ Validates working directory is clean\n- ✅ Updates version in `Cargo.toml` (workspace version)\n- ✅ Updates version in all npm `package.json` files\n- ✅ Updates lock files (`Cargo.lock`, `pnpm-lock.yaml`)\n- ✅ Generates/updates `CHANGELOG.md` from commit history\n- ✅ Commits changes: `chore(release): bump version to X.Y.Z`\n- ✅ Creates annotated tag: `vX.Y.Z`\n- ✅ Pushes commits and tag to GitHub\n- ✅ **Triggers automated release workflow**\n\nPlease ensure you are in release branch before running the command. For example,\n`git checkout -b chore/release-v1.0.0-beta.1`.\n\n#### 3. Alternative: Manual Review Before Push\n\nIf you prefer to review changes before pushing:\n\n```bash\n# Prepare release locally (no push)\npnpm bump:versions --no-push 1.0.0\n\n# Review the changes\ngit diff HEAD~1\ncat CHANGELOG.md\n\n# If everything looks good, push\ngit push \u0026\u0026 git push --tags\n```\n\n#### 4. Automated Release Pipeline\n\nOnce the tag is pushed, GitHub Actions automatically:\n\n1. **Validates** version consistency across all packages\n2. **Builds** binaries for all platforms:\n   - Linux (x86_64)\n   - macOS (x86_64, aarch64)\n3. **Runs** all tests\n4. **Publishes** packages:\n   - All versions (stable and pre-release):\n     - ✅ Publishes to crates.io\n     - ✅ Publishes to npm\n   - Tag differences:\n     - Stable (`v1.0.0`): npm `latest` tag, updates `stable` git tag\n     - Pre-release (`v1.0.0-beta.1`): npm `next` tag, no `stable` tag update\n5. **Creates** GitHub Release with:\n   - Binary downloads for all platforms\n   - Release notes from CHANGELOG.md\n   - SHA256 checksums\n   - Installation instructions\n\n## 🏷️ Version Strategy\n\n### Version Format\n\nEnclave follows [Semantic Versioning](https://semver.org/):\n\n- **Stable**: `v1.0.0` - Production ready\n- **Pre-release**: `v1.0.0-beta.1` - Testing/preview versions\n  - `-alpha.X` - Early development, may have breaking changes\n  - `-beta.X` - Feature complete, testing for bugs\n  - `-rc.X` - Release candidate, final testing\n\n### Which Version Should I Use?\n\n#### For Production (Mainnet)\n\nUse stable versions only:\n\n```bash\nenclaveup install              # Latest stable\nenclaveup install v1.0.0       # Specific stable version\n```\n\n#### For Testing (Testnet)\n\nYou can use pre-release versions:\n\n```bash\nenclaveup install --pre-release # Latest pre-release\nenclaveup install v1.0.0-beta.1 # Specific pre-release\n```\n\n#### For Development\n\nBuild from source:\n\n```bash\ngit clone https://github.com/gnosisguild/enclave.git\ncd enclave\ncargo build --release\n```\n\n## 🌿 Branch and Tag Strategy\n\n### Current Setup\n\n- **`main`** - Latest code. All releases are tagged from here. Using feature flags for experimental\n  features, we ensure that code is always stable.\n- **`v*.*.*`** - Version tags for releases\n- **`stable`** - Always points to the latest stable release\n\n### Installation Sources\n\n```bash\n# Latest stable release (recommended for production)\ncurl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/stable/install | bash\n\n# Latest development version (may be unstable)\ncurl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash\n```\n\n## 📋 Release Checklist\n\nFor maintainers doing a release:\n\n- [ ] Ensure all tests pass on `main`\n- [ ] Review commits since last release for proper conventional format\n- [ ] Decide version number (major/minor/patch)\n- [ ] Run: `pnpm bump:versions X.Y.Z`\n- [ ] Monitor GitHub Actions for successful deployment\n- [ ] Verify packages on [npm](https://www.npmjs.com/org/enclave) and\n      [crates.io](https://crates.io/search?q=enclave)\n- [ ] Check GitHub release page for binaries and changelog\n- [ ] Announce release (Discord/Twitter/etc)\n\n## 🔧 Script Options\n\nThe `bump:versions` script supports several options:\n\n```bash\n# Full automatic release (default)\npnpm bump:versions 1.0.0\n\n# Local only - don't push\npnpm bump:versions --no-push 1.0.0\n\n# Skip git operations entirely\npnpm bump:versions --skip-git 1.0.0\n\n# Dry run - see what would happen\npnpm bump:versions --dry-run 1.0.0\n\n# Show help\npnpm bump:versions --help\n```\n\n## 🔄 Rollback Procedure\n\nIf a release has issues:\n\n1. **Mark as deprecated on npm**:\n\n   ```bash\n   npm deprecate @enclave/sdk@1.0.0 \"Critical bug, use 1.0.1\"\n   ```\n\n2. **Yank from crates.io** (if critical):\n\n   ```bash\n   cargo yank --version 1.0.0 enclave\n   ```\n\n3. **Fix and release patch**:\n   ```bash\n   pnpm bump:versions 1.0.1\n   ```\n\n## 📊 Version History\n\nCheck our [Releases page](https://github.com/gnosisguild/enclave/releases) for full version history\nand changelogs.\n\n## Security and Liability\n\nThis repo is provided WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\nFITNESS FOR A PARTICULAR PURPOSE.\n\n## License\n\nThis repo created under the [LGPL-3.0+ license](LICENSE).\n\n[gha]: https://github.com/gnosisguild/enclave/actions\n[gha-badge]: https://github.com/gnosisguild/enclave/actions/workflows/ci.yml/badge.svg\n[hardhat]: https://hardhat.org/\n[hardhat-badge]: https://img.shields.io/badge/Built%20with-Hardhat-FFDB1C.svg\n[license]: https://opensource.org/license/lgpl-3-0\n[license-badge]: https://img.shields.io/badge/License-LGPLv3.0-blue.svg\n[docs]: https://docs.enclave.gg\n[docs-badge]: https://img.shields.io/badge/Documentation-blue.svg\n[quick-start]: https://docs.enclave.gg/quick-start\n[crisp]: https://docs.enclave.gg/CRISP/introduction\n[telegram]: https://t.me/+raYAZgrwgOw2ODJh\n[contributing]: CONTRIBUTING.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnosisguild%2Fenclave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnosisguild%2Fenclave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnosisguild%2Fenclave/lists"}