基于hyperledger fabric区块链素质拓展管理系统
项目概述
1.1 项目简介
本系统是一个基于区块链技术的高校素质拓展活动管理平台,为师生提供便捷、透明的素质拓展活动管理及学分认证服务。系统利用Hyperledger Fabric区块链确保成果数据的不可篡改性和可追溯性。
1.2 技术栈
- 前端: Vue 3 + Ant Design Vue + Vue Router + Vuex
- 后端: Gin (Go Web框架)
- 区块链: Hyperledger Fabric 2.x
- 数据库: MySQL 8.0 + CouchDB (Fabric状态数据库)
- 认证: JWT (JSON Web Token)
1.3 系统架构
┌─────────────┐
│ Vue前端应用 │
└──────┬──────┘
│ HTTP/REST API
▼
┌─────────────┐
│ Gin后端服务 │
└──────┬──────┘
│
├─────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ MySQL │ │ Fabric网络 │
│ 数据库 │ │ (链码/CouchDB)│
└──────────┘ └──────────────┘
2. 功能模块
2.1 用户管理模块
角色类型:
- 管理员 (admin): 系统管理员,负责用户管理、成果审核上链
- 教师 (teacher): 发布活动、记录成果、管理报名
- 学生 (student): 浏览活动、报名参与、查看成果
主要功能:
- 用户登录/注册
- 角色权限管理
- 密码加密存储 (bcrypt)
- JWT令牌认证
2.2 活动管理模块
功能列表:
- 教师创建活动 (草稿/发布)
- 活动状态管理 (草稿→已发布→报名结束→进行中→已结束→已归档)
- 活动信息查询 (按状态、创建者等)
- 报名人数统计
关键字段:
type Activity struct {
ActivityID string // 活动ID
ActivityName string // 活动名称
ActivityType string // 类型(学术科技/创新创业/文化艺术等)
Credits float64 // 学分值
StartTime/EndTime string // 活动时间
RegisterStart/End string // 报名时间
MaxParticipants int // 人数上限
Status string // 状态
}
2.3 报名管理模块
功能列表:
- 学生报名活动
- 教师审核报名
- 取消报名
- 出勤情况记录 (全程参与/部分参与/未参与)
报名流程:
- 学生提交报名 → 待审核/报名成功
- 教师审核 → 审核通过/审核未通过
- 活动进行
- 教师记录出勤
2.4 成果管理模块
功能列表:
- 教师录入学生成果
- 上传证明材料 (图片/PDF)
- 材料哈希计算 (SHA-256)
- 管理员审核上链
- 成果验证
- 学分统计
成果上链流程:
教师录入成果 → 上传证明材料 → 计算文件哈希
→ 管理员审核 → 通过后写入区块链 → 状态变更为"已上链"
3. 项目展示
首页

账户登录

管理员
首页

用户管理
创建用户


重置密码

成果审核



个人资料

教师
首页

发布活动

我的活动

管理活动

审核

记录出勤


更改活动状态


成果记录

个人资料

学生
首页

活动列表

查看活动详情

活动报名


我的报名


取消报名

我的成果





成果验证

4. 前端实现
4.1 目录结构
src/
├── views/ # 页面组件
│ ├── Login.vue # 登录页
│ ├── Home.vue # 首页
│ ├── ActivityList.vue # 活动列表
│ ├── ActivityDetail.vue # 活动详情
│ ├── MyActivities.vue # 我的活动(教师)
│ ├── MyRegistrations.vue # 我的报名(学生)
│ ├── AchievementList.vue # 成果列表
│ └── ...
├── store/ # Vuex状态管理
├── router/ # 路由配置
├── api/ # API接口
└── utils/ # 工具函数
4.2 关键页面说明
Login.vue - 登录页
- 用户名/密码登录
- JWT令牌存储
- 角色识别与路由跳转
ActivityList.vue - 活动列表
- 活动筛选 (状态、类型、级别)
- 活动搜索
- 报名按钮 (学生可见)
MyActivities.vue - 我的活动(教师)
- 标签页: 全部/草稿/进行中/已结束
- 活动状态更新
- 跳转报名管理
AchievementList.vue - 成果列表
- 标签页: 全部/已上链/待审核
- 成果详情查看
- 证明材料预览
- 区块链验证
AchievementApproval.vue - 成果审核(管理员)
- 待审核成果列表
- 证明材料预览
- 审核通过/驳回
- 上链操作
4.3 状态管理 (Vuex)
// 主要模块
- auth: 用户认证状态
- activity: 活动数据
- registration: 报名数据
- achievement: 成果数据
- user: 用户管理
5. 后端实现
5.1 项目结构
main.go # 主程序入口
├── 数据库初始化
├── Fabric连接初始化
├── 路由配置
└── API处理函数
5.2 核心功能
5.2.1 用户认证
// JWT令牌生成
func generateToken(user User) (string, error)
// JWT中间件
func authMiddleware(roles ...string) gin.HandlerFunc
5.2.2 活动管理API
POST /api/activity/create // 创建活动
PUT /api/activity/status/:id // 更新状态
GET /api/activity/:id // 查询活动
GET /api/activity/list // 活动列表
GET /api/activity/my // 我的活动
5.2.3 报名管理API
POST /api/registration/register // 学生报名
DELETE /api/registration/:activityId // 取消报名
GET /api/registration/my // 我的报名
PUT /api/participant/approve/... // 审核报名
PUT /api/participant/attendance/... // 记录出勤
5.2.4 成果管理API
POST /api/achievement/record-with-material // 录入成果+材料
PUT /api/achievement/approve/:id // 审核上链
GET /api/achievement/student/:studentId // 学生成果
POST /api/achievement/verify // 验证成果
GET /api/achievement/credits/:studentId // 总学分
GET /api/achievement/material/:id // 获取材料
5.3 文件上传处理
// 证明材料上传
- 保存路径: ./uploads/achievements/
- 文件命名: {achievementId}{扩展名}
- 哈希计算: SHA-256
- 支持格式: PDF, JPG, PNG
- 大小限制: 10MB
6. 区块链实现 (Hyperledger Fabric)
6.1 链码结构
smartcontract.go
├── Activity (活动数据结构)
├── Registration (报名记录)
├── StudentAchievement (学生成果)
└── SmartContract (合约方法)
6.2 核心链码方法
活动管理
CreateActivity(activityJSON) // 创建活动
UpdateActivityStatus(id, status) // 更新状态
QueryActivity(id) // 查询活动
QueryActivitiesByStatus(status) // 按状态查询
QueryActivitiesByCreator(creatorId) // 按创建者查询
报名管理
RegisterForActivity(registrationJSON) // 学生报名
ApproveRegistration(...) // 审核报名
CancelRegistration(activityId, studentId) // 取消报名
UpdateAttendance(...) // 更新出勤
QueryRegistrationsByStudent(studentId) // 学生报名记录
成果管理
RecordAchievement(achievementJSON) // 记录成果
UpdateAchievement(achievementJSON) // 更新成果(审核)
QueryAchievementsByStudent(studentId) // 学生成果
VerifyAchievement(studentId, id, hash) // 验证成果
GetTotalCredits(studentId) // 总学分
GetStudentActivityCredits(studentId) // 活动学分
6.3 复合键设计
activity~{activityId}
registration~{activityId}~{studentId}
achievement~{studentId}~{achievementId}
6.4 区块链事件
- ActivityCreated // 活动创建
- ActivityStatusUpdated // 状态更新
- StudentRegistered // 学生报名
- RegistrationReviewed // 报名审核
- RegistrationCanceled // 取消报名
- AttendanceUpdated // 出勤更新
- AchievementRecorded // 成果记录
- AchievementUpdated // 成果更新
7. 数据库设计
7.1 MySQL表结构
users表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
real_name VARCHAR(50) NOT NULL,
role VARCHAR(20) NOT NULL,
department VARCHAR(50),
student_id VARCHAR(30),
teacher_id VARCHAR(30),
email VARCHAR(100),
phone_number VARCHAR(20),
class VARCHAR(50),
major VARCHAR(50),
enroll_year VARCHAR(10),
job_title VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
7.2 CouchDB索引 (Fabric状态数据库)
{
"index": {
"fields": ["docType", "status"]
},
"name": "docType-status-index",
"type": "json"
}
8. 核心业务流程
8.1 活动发布流程
教师创建活动(草稿) → 写入区块链 → 发布活动
→ 学生浏览报名 → 活动进行 → 结束 → 归档
8.2 学分认证流程
活动结束 → 教师记录出勤 → 教师录入成果
→ 上传证明材料(计算哈希) → 管理员审核
→ 审核通过 → 写入区块链(状态:已上链)
→ 学生可查询 → 第三方可验证
8.3 成果验证流程
获取成果ID + 材料哈希 → 调用VerifyAchievement
→ 从区块链查询成果 → 比对哈希值
→ 返回验证结果(true/false)
9. 安全机制
9.1 认证与授权
- JWT令牌过期时间: 24小时
- 密码加密: bcrypt (cost=10)
- 角色权限控制: 中间件验证
9.2 区块链安全
- 数据不可篡改性
- 交易ID可追溯
- 材料哈希防伪造
- 数字签名验证
9.3 文件安全
- 文件类型验证
- 大小限制 (10MB)
- SHA-256哈希存储
- 文件名随机化
10. 特色功能
10.1 区块链验证
- 成果真实性验证
- 材料防篡改机制
- 交易历史追溯
10.2 学分统计
- 活动参与学分 (基于出勤)
- 成果认证学分 (已上链)
- 多维度学分统计
10.3 智能审核
- 报名自动审核/手动审核
- 出勤影响学分计算
- 状态流转控制
25

被折叠的 条评论
为什么被折叠?



