# EduVerseCredentials **Repository Path**: lintsinghua/edu-verse-credentials ## Basic Information - **Project Name**: EduVerseCredentials - **Description**: EduVerse Credentials是一个基于区块链的去中心化学术和职业凭证系统原型,旨在利用Web3技术提供更安全、隐私保护的数字凭证管理解决方案。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-17 - **Last Updated**: 2025-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
EduVerse Credentials Logo

EduVerse Credentials

🔐 去中心化学术和职业凭证系统

Node.js >= 16.x npm >= 8.x License: MIT

## 📋 项目概述 EduVerse Credentials 是一个基于区块链技术的去中心化学术和职业凭证系统,旨在为教育证书和职业资格提供可验证、安全且隐私保护的数字凭证解决方案。 ## 🏗️ 项目结构 项目采用前后端分离的架构: ``` eduverse-credentials/ ├── client/ # 前端应用 │ ├── public/ # 静态资源 │ ├── src/ # 前端源代码 │ │ ├── assets/ # 资源文件 │ │ ├── components/ # 组件 │ │ ├── contexts/ # 上下文 │ │ ├── pages/ # 页面 │ │ ├── services/ # 服务 │ │ └── utils/ # 工具函数 │ ├── build/ # 构建输出目录 │ ├── package.json # 前端依赖配置 │ └── webpack.config.js# Webpack配置 ├── server/ # 后端服务 │ ├── src/ # 后端源代码 │ │ ├── api.js # API路由 │ │ ├── core/ # 核心逻辑 │ │ ├── issuer/ # 发行方模块 │ │ ├── models/ # 数据模型 │ │ ├── schemas/ # 验证模式 │ │ ├── services/ # 服务层 │ │ ├── utils/ # 工具函数 │ │ ├── verifier/ # 验证方模块 │ │ └── wallet/ # 钱包模块 │ ├── circuits/ # 零知识证明电路 │ ├── data/ # 数据存储目录 │ ├── index.js # 后端入口点 │ └── package.json # 后端依赖配置 ├── docs/ # 项目文档 ├── .env.example # 环境变量示例 ├── create-env.sh # 开发环境配置脚本 ├── create-prod-env.sh # 生产环境配置脚本 └── package.json # 根项目配置 ``` ## 🚀 快速开始 ### 安装依赖 ```bash # 安装所有依赖(前端和后端) npm run install:all ``` ### 开发模式 ```bash # 同时启动前端和后端 npm run dev # 仅启动前端 npm run client # 仅启动后端 npm run server ``` ### 生产构建 ```bash # 构建前端 npm run build # 启动生产服务 npm start ``` ## 📚 API文档 后端API可通过以下端点访问: | 端点 | 描述 | |------|------| | `/api` | 主API端点 | | `/wallet` | 钱包相关API | | `/issuer` | 发行方相关API | | `/verifier` | 验证方相关API | | `/schemas` | 凭证Schema定义 | ## ⚖️ 许可证 MIT ## 💻 核心技术 - **🆔 去中心化身份 (DID)**: 实现符合W3C DID Core v1.0规范的DID方法 - **🔖 可验证凭证 (VC)**: 遵循W3C VC Data Model v2.0标准 - **🔍 零知识证明 (ZKP)**: 通过Polygon ID集成zk-SNARKs实现选择性披露 - **❌ 凭证撤销机制**: 支持W3C Bitstring Status List v1.0和Polygon ID原生撤销机制 ## 🧩 系统组件 - **👛 EduVerse钱包**: 用户管理数字身份与凭证的应用 - **🏢 发行方门户**: 凭证发行与管理界面 - **🔍 验证方接口**: 凭证验证与查询API ## 📦 安装与使用 ### 环境要求 - Node.js >= 16.x - npm >= 8.x ### 安装步骤 1. **克隆仓库** ```bash git clone https://github.com/yourusername/eduverse-credentials.git cd eduverse-credentials ``` 2. **安装所有依赖** ```bash npm run install:all ``` 3. **配置环境变量** ```bash # 运行环境变量创建脚本 ./create-env.sh # 或手动创建server/.env文件并配置环境变量 ``` 4. **启动开发服务** ```bash npm run dev ``` 5. **单独启动服务** ```bash # 仅启动后端 npm run server # 仅启动前端 npm run client ``` 6. **构建前端应用** ```bash npm run build ``` 7. **运行生产服务** ```bash npm start ``` ## 🤝 贡献指南 1. Fork本仓库 2. 创建特性分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 创建Pull Request ## 🔗 相关资源 - [W3C DID Core v1.0](https://www.w3.org/TR/did-core/) - [W3C VC Data Model v2.0](https://www.w3.org/TR/vc-data-model-2.0/) - [Polygon ID](https://polygon.technology/polygon-id) ## 📝 凭证流程使用说明 ### 📤 凭证发行和导入流程 1. **发行凭证** 🔖 - 在"发行方门户"中创建发行方DID (如果尚未创建) - 创建Schema (或选择已有Schema) - 在"凭证发行"选项卡中填写凭证信息,包括接收方DID和属性值 - 点击"发行凭证"按钮 - 凭证发行成功后,会出现凭证预览和复制选项 2. **导入凭证** 📥 - **方法一**: 在凭证发行成功后,点击"复制凭证JSON"按钮,然后切换到"钱包">"导入凭证"页面,粘贴JSON数据并提交 - **方法二**: 在凭证发行成功后,点击"打开导入页面"按钮,系统会自动打开导入页面并预填充凭证数据 - **方法三**: 手动打开"钱包"应用,点击"导入凭证"按钮或使用菜单进入导入页面,粘贴凭证JSON数据 3. **使用凭证** 🔑 - 成功导入凭证后,可在"凭证管理"页面查看所有凭证 - 点击凭证可查看详情、生成证明或进行其他操作 ## 🔍 凭证验证功能使用说明 EduVerse Credentials系统提供了丰富的凭证验证功能,支持多种验证方式和验证场景。 ### 🧪 验证功能类型 1. **可验证演示(VP)验证** ✅ - 验证带有签名或零知识证明的完整可验证演示 - 可以验证与特定请求相关联的挑战,防止重放攻击 - 支持多种零知识证明电路(如年龄证明、学位证明等) 2. **批量验证** 🔄 - 一次性验证多个可验证演示 - 适用于需要处理多个用户凭证的场景 - 提供整体验证结果和单个凭证的详细验证状态 3. **直接凭证验证** 📋 - 无需VP包装,直接验证单个可验证凭证(VC) - 验证凭证签名、撤销状态和过期时间 - 对特殊类型凭证(如公钥凭证)进行专门验证 ### 📋 使用步骤 #### 1. 创建验证请求 📝 系统支持三种不同类型的验证请求: - **年龄证明请求** 🔞 - 设置最小年龄要求 - 可选择限定允许的发行方 - **学位证明请求** 🎓 - 设置学位类型(如学士、硕士、博士) - 可选择指定专业和允许的发行方 - **MTP证明请求** 🔰 - 通用验证请求,证明持有者拥有特定类型凭证且未被撤销 - 设置凭证类型和Schema URL - 可选择限定允许的发行方 #### 2. 验证凭证 🔍 三种验证方式: - **单个VP验证**: 1. 切换到"验证凭证"标签页,选择"验证单个演示(VP)" 2. 如有关联请求,选择对应的请求ID 3. 粘贴VP JSON数据 4. 点击"验证演示"按钮 - **批量验证**: 1. 切换到"验证凭证"标签页,选择"批量验证" 2. 粘贴VP数组JSON数据(格式见页面说明) 3. 点击"批量验证"按钮 - **直接验证凭证**: 1. 切换到"验证凭证"标签页,选择"直接验证凭证(VC)" 2. 粘贴VC JSON数据 3. 点击"验证凭证"按钮 #### 3. 查看验证结果 📊 所有验证结果会自动添加到"验证历史"标签页,包含: - 验证ID - 验证时间 - 持有者DID - 验证结果(成功/失败) - 详细验证信息(可点击查看) 点击"查看详情"按钮可查看完整验证报告,包括: - 基本信息 - 验证检查项(VP签名、ZKP、凭证签名等) - 包含的凭证验证状态 - 错误信息(如有) ## ⚙️ 开发环境配置 ### 环境变量设置 为了正确运行EduVerse Credentials系统,需要设置以下环境变量(创建一个`.env`文件在项目根目录): ```bash # 基本配置 PORT=3000 NODE_ENV=development # Polygon ID SDK配置 CIRCUITS_PATH=./circuits # 零知识证明电路文件路径 DATA_STORAGE_PATH=./data # 数据存储路径 # Polygon Amoy测试网配置 POLYGON_AMOY_RPC_URL=https://polygon-amoy.blockpi.network/v1/rpc/public # Polygon测试网RPC STATE_CONTRACT_ADDRESS=0x134B1BE34911E39A8397ec6289782989729807a4 # 状态合约地址 # 状态列表服务配置 STATUS_LIST_BASE_URL=http://localhost:3000/credentials/status # 撤销状态列表访问URL前缀 # RHS (Reverse Hash Service) 配置 RHS_URL=https://rhs-staging.polygonid.me # Polygon ID的RHS服务URL ``` ### ⚠️ SDK初始化问题解决 在首次运行系统时,可能会出现SDK初始化失败的问题,主要表现为: 1. EthStateStorage初始化失败 2. 系统自动回退到使用模拟SDK **解决方法**: 1. **检查RPC配置**:确保`POLYGON_AMOY_RPC_URL`指向有效的Polygon Amoy测试网RPC节点。 可使用以下公共RPC节点替代: - `https://rpc-amoy.polygon.technology/` - `https://polygon-amoy.blockpi.network/v1/rpc/public` - `https://polygon-amoy.g.alchemy.com/v2/YOUR_API_KEY`(需使用自己的Alchemy API KEY) 2. **检查状态合约地址**:确保`STATE_CONTRACT_ADDRESS`设置正确。对于Amoy测试网,可以使用官方提供的合约地址。 3. **电路文件**:首次运行前,确保`circuits`目录存在并包含必要的电路文件。如果没有,系统将自动使用模拟实现。 4. **手动指定模拟模式**:如果只需要开发测试,可以注释掉真实SDK的加载代码,直接使用模拟SDK: ```javascript // 在src/utils/sdk-init.js中 let polygonSDK = null; // 强制使用模拟SDK ```