一、实际应用场景描述
某高校技术类社团(如区块链/全栈开发社团)每学期有固定经费来源:
- 学校下拨经费
- 企业赞助
- 活动报名费
支出包括:
- 场地租赁
- 物料采购
- 讲师礼品
- 餐饮报销
当前管理方式多为 Excel + 微信群截图,透明度不足,历史记录易被修改。
本程序用于:
- 所有收支行为写入区块链
- 成员可通过 CLI 查询任意一笔记录
- 负责人无法事后篡改数据
二、引入痛点分析
传统方式 存在问题
Excel / 手工记账 易误删、易篡改
群公告截图 无法验证真实性
中心化数据库 管理员权限过大
无审计机制 挪用难以发现
核心诉求:
不依赖信任人,而依赖可验证的数据结构。
三、核心逻辑讲解(简化区块链模型)
1️⃣ 数据结构设计
每一笔经费记录为一条 Block:
Block:
├─ index
├─ timestamp
├─ transaction_type (收入 / 支出)
├─ amount
├─ description
├─ operator
├─ previous_hash
└─ hash
2️⃣ 防篡改机制
- 每个区块包含 前一区块哈希
- 任意历史数据被修改 → 哈希断裂 → 链失效
- 成员可校验整条链完整性
3️⃣ 存储方式
- 本地 JSON 文件(教学场景)
- 不依赖第三方链(如 Ethereum)
- 适合社团内部可信环境
四、代码模块化设计
fund_chain/
├── block.py # 区块定义
├── blockchain.py # 链管理
├── cli.py # 命令行入口
├── utils.py # 哈希工具
├── data/
│ └── chain.json # 本地账本
└── README.md
五、核心代码实现(Python)
✅ block.py
import hashlib
import json
from datetime import datetime
class Block:
def __init__(self, index, transaction_type, amount, description, operator, previous_hash):
self.index = index
self.timestamp = datetime.now().isoformat()
self.transaction_type = transaction_type
self.amount = amount
self.description = description
self.operator = operator
self.previous_hash = previous_hash
self.hash = self.calculate_hash()
def calculate_hash(self):
block_string = json.dumps(self.__dict__, sort_keys=True)
return hashlib.sha256(block_string.encode()).hexdigest()
✅ blockchain.py
import json
import os
from block import Block
CHAIN_PATH = "data/chain.json"
class Blockchain:
def __init__(self):
self.chain = []
self.load_chain()
def create_genesis_block(self):
genesis = Block(0, "init", 0, "Genesis Block", "system", "0")
self.chain.append(genesis)
self.save_chain()
def add_transaction(self, t_type, amount, description, operator):
last_block = self.chain[-1]
new_block = Block(
index=last_block.index + 1,
transaction_type=t_type,
amount=amount,
description=description,
operator=operator,
previous_hash=last_block.hash
)
self.chain.append(new_block)
self.save_chain()
def save_chain(self):
os.makedirs("data", exist_ok=True)
with open(CHAIN_PATH, "w", encoding="utf-8") as f:
json.dump([b.__dict__ for b in self.chain], f, indent=2)
def load_chain(self):
if not os.path.exists(CHAIN_PATH):
self.create_genesis_block()
else:
with open(CHAIN_PATH, "r", encoding="utf-8") as f:
data = json.load(f)
self.chain = [Block(**b) for b in data]
def is_valid(self):
for i in range(1, len(self.chain)):
curr = self.chain[i]
prev = self.chain[i - 1]
if curr.previous_hash != prev.hash:
return False
return True
✅ cli.py
from blockchain import Blockchain
def main():
bc = Blockchain()
print("社团经费区块链系统")
print("1. 添加收入")
print("2. 添加支出")
print("3. 查看账本")
print("4. 校验链完整性")
choice = input("选择操作:")
if choice == "1":
amount = float(input("金额:"))
desc = input("说明:")
operator = input("负责人:")
bc.add_transaction("income", amount, desc, operator)
print("✅ 已上链")
elif choice == "2":
amount = float(input("金额:"))
desc = input("说明:")
operator = input("负责人:")
bc.add_transaction("expense", amount, desc, operator)
print("✅ 已上链")
elif choice == "3":
for b in bc.chain:
print(f"{b.index} | {b.timestamp} | {b.transaction_type} | {b.amount} | {b.description} | {b.operator}")
elif choice == "4":
print("链状态:", "合法 ✅" if bc.is_valid() else "异常 ❌")
if __name__ == "__main__":
main()
六、README 文件(节选)
# 社团经费区块链公示系统
## 功能
- 收支记录上链
- 历史不可篡改
- 成员可查
- 链完整性校验
## 使用方式
bash
pip install -r requirements.txt
python cli.py
## 适用场景
- 高校社团
- 学生组织
- 内部财务公示
七、使用说明(简要)
1. 负责人录入每笔收支
2. 系统自动写入区块
3. 成员运行程序查看完整账本
4. 定期执行「链校验」确认未被篡改
八、核心知识点卡片(教学用)
概念 说明
区块 单次交易的数据容器
哈希 数据指纹,防篡改
链式结构 前后关联,形成信任链
去中心思想 不依赖单一管理者
审计机制 可验证、可追溯
九、总结
本项目并非追求复杂公链技术,而是:
- 将区块链核心思想应用到真实社团治理
- 用最小可行方案解决“信任成本”问题
- 强调工程透明性 > 技术炫技
对社团而言,这是一次低成本、高可解释性的信任升级实验;
对学生而言,是一次完整的全栈 + 区块链思维训练。
如果你愿意,可以再:
- 扩展为 Web 可视化版本
- 增加多签审批逻辑
- 或改写为课程实验指导书风格
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!