【Web3.0】去中心化“学习成果”凭证徽章系统
课程介绍
项目功能
课程章节 
合规声明
1. eb3.0与数字凭证概论 选修
1.1. 从Web1.0到Web3.0:只读→读写→拥有 选修
1.2. 什么是区块链?——去中心化、不可篡改、透明公开 选修
1.3. 传统证书的问题(易伪造、难验证)与区块链解决方案 选修
1.4. 项目分层目标(初中:理解哈希+实现简易区块链 / 高中:实现POW+Flask API / 大学:实现多节点共识) 选修
1.5. 项目最终演示:教师颁发徽章,学生查询徽章,验证哈希完整性 选修
1.6. 开发环境搭建(Python + Flask + requests + hashlib) 选修
2. ython基础衔接:哈希与JSON 选修
2.1. 什么是哈希函数?——输入任意长度,输出固定长度(SHA256) 选修
2.2. hashlib库使用:hashlib.sha256(b"hello").hexdigest() 选修
2.3. 哈希特性:相同输入→相同输出;输入微小改变→输出巨大变化(雪崩效应) 选修
2.4. JSON数据格式:字典、列表的序列化与反序列化(json.dumps, json.loads) 选修
2.5. 将Python对象转为字符串再哈希:json.dumps(obj, sort_keys=True) 选修
2.6. 实战:计算一个区块的哈希(包含索引、时间戳、交易数据) 选修
3. 区块数据结构设计 选修
3.1. 区块类(Block)属性:index, timestamp, transactions, previous_hash, nonce, hash 选修
3.2. 交易类(Transaction)属性:from_address, to_address, badge_name, issue_date, metadata_url 选修
3.3. 实现区块的calculate_hash方法:将除hash外的所有字段拼接后SHA256 选修
3.4. 创世区块(Genesis Block):第一个区块,previous_hash为全0 选修
3.5. 添加区块方法:矿工调用,传入交易列表和前一区块哈希 选修
3.6. 测试:手动创建3个区块,打印每个区块的哈希 选修
4. 工作量证明(Proof of Work) 选修
4.1. 为什么需要工作量证明?——防止恶意节点随意添加区块 选修
4.2. 难度目标:要求区块哈希以"00"开头(难度可调) 选修
4.3. 实现mine_block方法:暴力尝试nonce(从0递增),直到哈希满足难度条件 选修
4.4. 计算挖矿耗时:记录开始和结束时间,计算每秒尝试次数 选修
4.5. 动态难度调整:每10个区块调整一次,使平均出块时间稳定在5秒 选修
4.6. 可视化:打印每次尝试的nonce和哈希(前10次),展示寻找过程 选修
5. 区块链类与完整性校验 选修
5.1. 区块链类(Blockchain)属性:chain(区块列表), pending_transactions(待处理交易池) 选修
5.2. 添加交易方法:将新交易加入pending_transactions 选修
5.3. 挖矿方法:打包pending_transactions为新区块,执行POW,添加到链 选修
5.4. 校验链完整性:遍历每个区块,验证哈希是否正确、previous_hash是否匹配 选修
5.5. 篡改检测实验:手动修改某个区块的交易内容,调用校验函数返回False 选修
5.6. 实战:创建一个区块链,添加3笔交易,挖矿2次,验证完整性 选修
6. lask Web API开发 选修
6.1. Flask入门:创建应用、定义路由(@app.route) 选修
6.2. API 1:GET /chain —— 返回整个区块链(JSON格式) 选修
6.3. API 2:POST /transactions/new —— 接收交易数据,添加到交易池 选修
6.4. API 3:GET /mine —— 触发挖矿,打包交易生成新区块 选修
6.5. API 4:GET /nodes/resolve —— 简单共识(取最长链) 选修
6.6. 使用Postman或curl测试API:发送POST请求创建徽章交易 选修
7. 前端界面:颁发徽章表单 选修
7.1. HTML基础:form表单、input输入框、button按钮 选修
7.2. 使用JavaScript Fetch API:发送POST请求到Flask后端 选修
7.3. 实现“颁发徽章”页面:输入学生地址(字符串)、徽章名称、颁发日期 选修
7.4. 表单提交后显示交易哈希(Transaction ID) 选修
7.5. 简单CSS美化:Bootstrap或Tailwind快速布局 选修
7.6. 分层适配:初中提供完整前端代码 / 高中自己修改样式 / 大学实现React简化版 选修
8. 前端界面:查询徽章 选修
8.1. 实现“查询徽章”页面:输入学生地址,点击查询 选修
8.2. 后端新增API:GET /badges/ —— 遍历所有区块,筛选该学生收到的交易 选修
8.3. 前端展示查询结果:徽章名称、颁发日期、颁发者、区块高度 选修
8.4. 添加“验证真伪”按钮:重新计算该区块的哈希,对比链上存储的哈希 选修
8.5. 若哈希一致显示“✅真品”,否则显示“❌已被篡改” 选修
8.6. 实战:颁发一个徽章,篡改数据库(修改链上数据),验证是否被检测出 选修
9. 区块链浏览器实现 选修
9.1. 什么是区块链浏览器?(类似Etherscan) 选修
9.2. 新增页面:展示所有区块,点击区块可查看详情 选修
9.3. 区块详情页:区块哈希、时间戳、交易列表、nonce、挖矿难度 选修
9.4. 交易详情页:展示from, to, badge_name, metadata_url 选修
9.5. 可视化:使用Graphviz绘制区块链结构图(区块→区块箭头) 选修
9.6. 实时更新:每隔5秒自动刷新页面,获取最新区块 选修
10. 多节点网络与简单共识(大学版) 选修
10.1. 为什么需要多节点?——真正去中心化 选修
10.2. 节点注册:每个节点维护一个其他节点的URL列表 选修
10.3. 广播交易:当收到新交易时,广播给所有已知节点 选修
10.4. 广播区块:当挖出新区块时,广播给其他节点 选修
10.5. 冲突解决(共识):比较链长,选择最长的有效链 选修
10.6. 实战:在同一台电脑上启动3个Flask实例(端口5000,5001,5002),模拟多节点网络 选修
11. 持久化与安全性 选修
11.1. 问题:重启程序后链数据丢失 选修
11.2. 解决方案:使用SQLite存储区块链和交易池 选修
11.3. 实现save_to_db和load_from_db方法 选修
11.4. 数字签名(可选):使用RSA私钥签名交易,公钥验证身份 选修
11.5. 简单身份认证:教师端需要API Key才能颁发徽章 选修
11.6. 分层适配:初中仅实现文件存储(JSON) / 高中实现SQLite / 大学实现数字签名 选修
12. 项目展示与教育意义 选修
12.1. 演示流程:教师颁发徽章 → 学生查询 → 篡改尝试 → 验证失败 选修
12.2. 与传统证书对比:展示区块链证书的不可篡改优势 选修
12.3. 答辩问题:区块链能耗问题?工作量证明是否必要? 选修
12.4. 拓展方向1:接入以太坊测试网(Sepolia),发行真正的ERC-721徽章NFT 选修
12.5. 拓展方向2:与去中心化身份(DID)结合,学生自主管理凭证 选修
12.6. 拓展方向3:开发移动端App(Flutter + Web3.js) 选修
联系Tom老师
扫码添加老师微信
微信1二维码 微信2二维码
QQ:
1445154666
邮箱:
1445154666@qq.com