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, 以太坊, 区块链, 去中心化基础设施, 去中心化应用, 可信执行环境, 可验证计算, 威胁情报, 安全防御评估, 容器化, 开发者工具, 无信任计算, 日志审计, 智能合约, 机密计算, 私钥管理, 网络安全, 网络安全, 请求拦截, 部署工具, 链上交互, 隐私保护, 隐私保护