Layr-Labs/eigenx-cli

GitHub: Layr-Labs/eigenx-cli

EigenX CLI 是一个用于在可信执行环境(TEE)中部署容器化应用程序的工具,内置私钥管理功能以支持安全的链上操作。

Stars: 18 | Forks: 8

# EigenX CLI **在可信执行环境(TEEs)中部署可验证的应用程序** EigenX 允许您部署容器化的应用程序,这些应用程序运行在安全的、可验证的计算环境中,并内置了私钥管理功能。您的应用将获得一个由其控制的唯一钱包,从而能够执行自主的链上操作,同时确保秘密安全。 ## 前置条件 - **计费账户** - 创建应用所必需。使用现有地址运行 `eigenx auth login`,或通过 `eigenx auth generate` 生成,然后使用 `eigenx billing subscribe` 设置计费。 - **Docker** - 用于打包和发布应用镜像([下载](https://www.docker.com/get-started/)) - **Sepolia ETH** - 用于部署交易([Google Cloud Faucet](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) | [Alchemy Faucet](https://sepoliafaucet.com/)) ## 主网 Alpha 限制 - **不建议用于客户资金** - 主网 Alpha 旨在帮助开发者构建、测试和发布应用程序。我们不建议在此阶段的主网 Alpha 中持有大量客户资金。 - **开发者仍需受信任** - 主网 Alpha 尚未实现完全可验证和无需信任的执行。后续版本将确保开发者无法恶意升级代码,并提供活跃性保证。 - **无 SLA** - 主网 Alpha 没有关于支持和基础设施正常运行时间的 SLA。 ## **快速开始** ### **安装** #### macOS/Linux ``` curl -fsSL https://eigenx-scripts.s3.us-east-1.amazonaws.com/install-eigenx.sh | bash ``` #### Windows ``` curl -fsSL https://eigenx-scripts.s3.us-east-1.amazonaws.com/install-eigenx.ps1 | powershell - ``` ### 初始设置 ``` # 登录到您的 Docker registry(推送镜像所必需) docker login # 使用现有的私钥登录 eigenx auth login ``` **没有私钥?** 请改用 `eigenx auth generate --store` **需要 Sepolia ETH?** 运行 `eigenx auth whoami` 查看您的地址,然后从 [Google Cloud](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) 或 [Alchemy](https://sepoliafaucet.com/) 获取资金 ### **创建与部署** ``` # 创建您的应用(选择:typescript | python | golang | rust) eigenx app create my-app typescript cd my-app # 配置环境变量 cp .env.example .env # 部署到 TEE eigenx app deploy ``` ### **使用现有项目** 已有项目?您不需要 `eigenx app create` - 该 CLI 适用于任何基于 Docker 的项目: ``` # 从您现有的项目目录 cd my-existing-project # 确保您有 Dockerfile 和 .env 文件 # 如果在标准位置未找到,CLI 将提示您输入这些信息 # 直接部署 - CLI 将检测您的项目 eigenx app deploy ``` **您需要:** - **Dockerfile** - 必须以 `linux/amd64` 为目标并以 root 用户身份运行 - **.env 文件** - 用于环境变量(可选,但推荐) 如果 Dockerfile 和 .env 文件不在默认位置,CLI 会自动提示输入路径。这意味着您可以将 eigenx 与任何现有的容器化应用程序一起使用,而无需重构您的项目。 **需要 TLS/HTTPS?** 运行 `eigenx app configure tls` 添加必要的配置文件,以便在 TEE 中进行私有流量终止的域名设置。 ### **查看您的应用** ``` # 查看应用信息和日志 eigenx app info eigenx app logs # 添加 --watch(或 -w)以持续轮询实时更新 eigenx app info --watch eigenx app logs --watch ``` 就是这样!您的入门应用现在正在 TEE 中运行,并且可以访问只有它自己能访问的 MNEMONIC。 **准备自定义?** 编辑您的应用代码,在 `.env` 中更新您需要的任何 API 密钥,然后运行 `eigenx app upgrade my-app` 部署您的更改 ## 应用环境 您的 TEE 应用程序具有以下能力: 1. **安全执行** - 您的代码在具有硬件级隔离的 Intel TDX 实例中运行 2. **自动生成的钱包** - 通过 `process.env.MNEMONIC` 访问私有的助记词 - 使用标准库派生钱包账户(例如,viem 的 `mnemonicToAccount(process.env.MNEMONIC)`) - 只有您的 TEE 可以解密并使用此助记词 3. **环境变量** - `.env` 文件中的所有变量在您的容器中都可用 - 带有 `_PUBLIC` 后缀的变量对用户可见,以实现透明度 - 标准变量在 TEE 内部保持私有和加密状态 4. **链上管理** - 您的应用程序生命周期通过以太坊智能合约进行控制 ### 使用您的应用 ``` # 列出您的所有应用 eigenx app list # 停止/启动您的应用 eigenx app stop my-app eigenx app start my-app # 终止您的应用 eigenx app terminate my-app ``` ## 身份验证 EigenX CLI 需要私钥来签署交易。三种选项: ### 1. OS 密钥环(推荐) ``` eigenx auth generate --store # Generate new key and store it eigenx auth login # Store an existing key securely eigenx auth whoami # Check authentication eigenx auth logout # Remove key ``` ### 2. 环境变量 ``` export EIGENX_PRIVATE_KEY=0x1234... eigenx app deploy ``` ### 3. 命令标志 ``` eigenx app deploy --private-key 0x1234... ``` **优先级:** 标志 → 环境 → 密钥环 ## TLS/HTTPS 设置 ### 启用 TLS ``` # 为您的项目添加 TLS 配置 eigenx app configure tls # 向 .env 添加变量 cat .env.example.tls >> .env ``` ### 配置 `.env` 中必需: ``` DOMAIN=yourdomain.com APP_PORT=3000 ``` 首次部署推荐: ``` ENABLE_CADDY_LOGS=true # Debug logs ACME_STAGING=true # Test certificates (avoid rate limits) ``` ### DNS 设置 创建指向实例 IP 的 A 记录: - 类型:A - 名称:yourdomain.com - 值:``(从 `eigenx app info` 获取) ### 部署 ``` eigenx app upgrade ``` ### 生产证书 要从 staging 切换到 production: ``` # 在 .env 中设置: ACME_STAGING=false ACME_FORCE_ISSUE=true # Only if staging cert exists # 部署,然后为将来的部署设置 ACME_FORCE_ISSUE=false ``` **注意:** - Let's Encrypt 速率限制:每个域名每周 5 个证书 - 先使用 staging 证书进行测试,以避免速率限制 - DNS 更改可能需要几分钟才能传播 ## 完整命令参考 ### 身份验证 | 命令 | 描述 | | --- | --- | | `eigenx auth generate` | 生成新私钥并可选择存储它(别名:`gen`、`new`) | | `eigenx auth login` | 将现有私钥存储在 OS 密钥环中 | | `eigenx auth whoami` | 显示当前身份验证状态和地址 | | `eigenx auth list` | 按环境列出所有存储的私钥 | | `eigenx auth logout` | 从 OS 密钥环中移除私钥 | ### 项目管理 | 命令 | 描述 | | --- | --- | | `eigenx app create [name] [language]` | 从模板创建新项目 | | `eigenx app configure tls` | 将 TLS 配置添加到您的项目 | | `eigenx app profile set ` | 设置应用配置文件(名称、网站、描述、社交链接、图标) | ### 部署与更新 | 命令 | 描述 | | --- | --- | | `eigenx app deploy [image_ref]` | 将新应用部署到 TEE | | `eigenx app upgrade ` | 更新现有部署 | ### 生命周期管理 | 命令 | 描述 | | --- | --- | | `eigenx app start [app-id\|name]` | 启动已停止的应用 | | `eigenx app stop [app-id\|name]` | 停止正在运行的应用 | | `eigenx app terminate [app-id\|name]` | 永久移除应用 | ### 监控 | 命令 | 描述 | | --- | --- | | `eigenx app list` | 列出您所有已部署的应用 | | `eigenx app info [app-id\|name]` | 显示详细的应用信息 | | `eigenx app logs [app-id\|name]` | 查看应用日志 | **监视模式:** 向 `info` 或 `logs` 命令添加 `--watch`(或 `-w`)以持续轮询更新 ### 部署环境管理 | 命令 | 描述 | | --- | --- | | `eigenx environment show` | 显示当前活动的部署环境(别名:`env`) | | `eigenx environment list` | 列出可用的部署环境 | | `eigenx environment set ` | 设置部署环境 | ### 配置 | 命令 | 描述 | | --- | --- | | `eigenx telemetry [--enable\|--disable\|--status]` | 管理使用情况分析 | | `eigenx upgrade` | 将 CLI 更新到最新版本 | | `eigenx version` | 显示 CLI 版本 | ## 高级用法 ### 手动构建和推送镜像 如果您更喜欢自己构建和推送 Docker 镜像,而不是让 CLI 处理,或者已经有现有镜像: ``` # 手动构建并推送您的镜像 docker build --platform linux/amd64 -t myregistry/myapp:v1.0 . docker push myregistry/myapp:v1.0 # 使用镜像引用进行部署 eigenx app deploy myregistry/myapp:v1.0 ``` **要求:** - 镜像必须以 `linux/amd64` 架构为目标 - 应用程序必须以 root 用户身份运行(TEE 要求) ## 遥测 EigenX 收集匿名使用数据,以帮助我们改进 CLI 并了解其使用方式。默认情况下启用此遥测,但可以轻松禁用。 ### 我们收集的内容 - 使用的命令(例如,`eigenx app create`、`eigenx app deploy`) - 错误计数和类型,以识别常见问题 - 性能指标(命令执行时间) - 系统信息(操作系统、架构) - 部署环境(例如,sepolia、mainnet-alpha) - 用户以太坊地址 ### 我们不收集的内容 - 个人信息或标识符 - 私钥或敏感凭据 - 应用程序源代码或配置 - 具体文件路径或项目名称 ### 管理遥测 ``` # 检查当前遥测状态 eigenx telemetry --status # 禁用遥测 eigenx telemetry --disable # 重新启用遥测 eigenx telemetry --enable ``` 遥测设置是全局存储的,并在所有项目中持久存在。 ## 架构 要详细了解 EigenX 如何通过确定性身份实现可验证应用程序,请参阅我们的 [架构文档](docs/EIGENX_ARCHITECTURE.md)。 ### 核心组件 - **硬件隔离** - 带有内存加密的 Intel TDX 安全飞地 - **证明** - 精确 Docker 镜像完整性的加密证明 - **确定性密钥** - 应用通过 KMS 获得一致的身份 - **智能合约** - 链上配置和生命周期管理 ## 开发 从源代码构建: ``` git clone https://github.com/Layr-Labs/eigenx-cli cd eigenx-cli make build # Builds for development (default) GO_TAGS=prod make build # Builds for production ./bin/eigenx --help ``` 运行测试: ``` make tests # Full test suite make tests-fast # Quick tests only ``` ## 发布流程 ### 本地模板开发 要在不推送到 GitHub 的情况下在本地测试模板更改: 1. 克隆模板仓库: ``` git clone https://github.com/Layr-Labs/eigenx-templates ``` 2. 使用环境变量配合本地模板: ``` # 从 eigenx-cli 目录或其上一级目录 EIGENX_USE_LOCAL_TEMPLATES=true ./bin/eigenx app create test-app typescript # 或显式指定路径 EIGENX_TEMPLATES_PATH=/path/to/eigenx-templates EIGENX_USE_LOCAL_TEMPLATES=true eigenx app create test-app golang ``` 这将使用您本地 `eigenx-templates/` 目录中的模板,而不是从 GitHub 获取。 ## 核心概念 要深入了解 EigenX 概念,请参阅 [EIGENX_CONCEPTS.md](docs/EIGENX_CONCEPTS.md): - [**密钥**](docs/EIGENX_CONCEPTS.md#overview-of-keys) - 身份验证密钥与 TEE 助记词、存储位置和安全模型 - [**环境变量**](docs/EIGENX_CONCEPTS.md#overview-of-environment-variables) - 加密、公共变量和 KMS 安全性 - [**应用生命周期**](docs/EIGENX_CONCEPTS.md#overview-of-app-lifecycle) - 状态、转换和生命周期流程图 - [**隐私**](docs/EIGENX_CONCEPTS.md#overview-of-privacy) - 什么是私有的、什么是公开的以及隐私保证 - [**安全最佳实践**](docs/EIGENX_CONCEPTS.md#security-best-practices) - 安全 TEE 开发的注意事项 - [**威胁模型**](docs/EIGENX_CONCEPTS.md#threat-model) - TEE/KMS 防护对象及安全边界 ## 许可证 ### 开发版本 用于在生产环境之前测试新功能: ``` # 使用 dev 后缀和递增的构建号进行标记 git tag v0.1.0-dev.1 git push origin v0.1.0-dev.1 # 发现 bug?递增构建号 git tag v0.1.0-dev.2 git push origin v0.1.0-dev.2 ``` 这将部署到开发环境,并可以通过以下方式安装: ``` curl -fsSL https://eigenx-scripts.s3.us-east-1.amazonaws.com/install-eigenx.sh | bash -s -- --dev ``` ### 生产版本 在开发环境中测试后,提升到生产环境: ``` # 将最新的 v0.1.0-dev.* 版本提升到生产环境 git tag v0.1.0 git push origin v0.1.0 ``` 这将: - 验证开发版本是否存在(例如,`v0.1.0-dev.2`) - 将**完全相同的二进制文件**从开发环境复制到生产环境 - 创建 GitHub release - 更新稳定安装通道 用户可以通过以下方式获取提升的版本: ``` curl -fsSL https://eigenx-scripts.s3.us-east-1.amazonaws.com/install-eigenx.sh | bash ``` ### 主要优势 - **一次构建**:相同的二进制文件从开发环境提升到生产环境 - **安全性**:无法将未经测试的代码发布到生产环境 - **共存**:`eigenx-dev` 和 `eigenx` 可以同时安装 - **清晰的版本**:生产环境获得清晰的版本号(v0.1.0) - **轻松回滚**:标记任何以前的版本以立即回滚 ### 安装渠道 - **开发版**:`--dev` 标志安装为 `eigenx-dev` - **生产版**:默认安装安装为 `eigenx` 两个版本可以在同一系统上共存。 ## 免责声明 **🚧 eigenx-cli 处于 alpha 阶段,正在积极开发中,尚未经过审计。** - 功能可能会被添加、移除或修改 - 接口将会有重大更改 - 应**仅用于测试目的**,**不可用于生产环境** - 按“原样”提供,不保证功能或生产支持 **Eigen Labs, Inc. 不为生产用途提供支持。** ## 安全 如果您发现漏洞,请**不要**提交 issue。请直接通过 `security@eigenlabs.org` 联系维护者。
标签:Cutter, DApp, Docker, EigenX, EVTX分析, NIDS, Sepolia, TEE, Web3, 以太坊, 区块链, 去中心化基础设施, 去中心化应用, 可信执行环境, 可验证计算, 威胁情报, 安全防御评估, 容器化, 开发者工具, 无信任计算, 日志审计, 智能合约, 机密计算, 私钥管理, 网络安全, 网络安全, 请求拦截, 部署工具, 链上交互, 隐私保护, 隐私保护