1.1.
从Web1.0到Web3.0:只读→读写→拥有
选修
1.2.
什么是区块链?——去中心化、不可篡改、透明公开
选修
1.3.
传统证书的问题(易伪造、难验证)与区块链解决方案
选修
1.4.
项目分层目标(初中:理解哈希+实现简易区块链 / 高中:实现POW+Flask API / 大学:实现多节点共识)
选修
1.5.
项目最终演示:教师颁发徽章,学生查询徽章,验证哈希完整性
选修
1.6.
开发环境搭建(Python + Flask + requests + hashlib)
选修
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.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.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.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.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.1.
实现“查询徽章”页面:输入学生地址,点击查询
选修
8.2.
后端新增API:GET /badges/ —— 遍历所有区块,筛选该学生收到的交易
选修
8.3.
前端展示查询结果:徽章名称、颁发日期、颁发者、区块高度
选修
8.4.
添加“验证真伪”按钮:重新计算该区块的哈希,对比链上存储的哈希
选修
8.5.
若哈希一致显示“✅真品”,否则显示“❌已被篡改”
选修
8.6.
实战:颁发一个徽章,篡改数据库(修改链上数据),验证是否被检测出
选修
9.1.
什么是区块链浏览器?(类似Etherscan)
选修
9.2.
新增页面:展示所有区块,点击区块可查看详情
选修
9.3.
区块详情页:区块哈希、时间戳、交易列表、nonce、挖矿难度
选修
9.4.
交易详情页:展示from, to, badge_name, metadata_url
选修
9.5.
可视化:使用Graphviz绘制区块链结构图(区块→区块箭头)
选修
9.6.
实时更新:每隔5秒自动刷新页面,获取最新区块
选修
10.1.
为什么需要多节点?——真正去中心化
选修
10.2.
节点注册:每个节点维护一个其他节点的URL列表
选修
10.3.
广播交易:当收到新交易时,广播给所有已知节点
选修
10.4.
广播区块:当挖出新区块时,广播给其他节点
选修
10.5.
冲突解决(共识):比较链长,选择最长的有效链
选修
10.6.
实战:在同一台电脑上启动3个Flask实例(端口5000,5001,5002),模拟多节点网络
选修
11.2.
解决方案:使用SQLite存储区块链和交易池
选修
11.3.
实现save_to_db和load_from_db方法
选修
11.4.
数字签名(可选):使用RSA私钥签名交易,公钥验证身份
选修
11.5.
简单身份认证:教师端需要API Key才能颁发徽章
选修
11.6.
分层适配:初中仅实现文件存储(JSON) / 高中实现SQLite / 大学实现数字签名
选修
12.1.
演示流程:教师颁发徽章 → 学生查询 → 篡改尝试 → 验证失败
选修
12.2.
与传统证书对比:展示区块链证书的不可篡改优势
选修
12.3.
答辩问题:区块链能耗问题?工作量证明是否必要?
选修
12.4.
拓展方向1:接入以太坊测试网(Sepolia),发行真正的ERC-721徽章NFT
选修
12.5.
拓展方向2:与去中心化身份(DID)结合,学生自主管理凭证
选修
12.6.
拓展方向3:开发移动端App(Flutter + Web3.js)
选修