一个基于以太坊区块链技术的警情数据管理系统,实现了警情数据上链存证、验证和撤销等核心功能。
警情链系统旨在提高警情数据的可信度、透明度和安全性。系统使用以太坊区块链存储警情数据哈希,通过智能合约实现数据的不可篡改和可验证性,同时结合IPFS分布式存储系统保存警情PDF文件,建立了完整的警情数据链上管理体系。
- Python 3.8+
- 以太坊节点 (Ganache/Geth)
- IPFS节点 (可选)
- Solidity编译器 (solc 0.8.x)
-
安装依赖:
pip install -r requirements.txt -
初始化系统:
python start.py --init -
启动应用:
python start.py -
访问应用:
- 主应用: http://localhost:5000
- 登录账号: admin/admin123
- 支持CSV格式的警情数据批量导入
- 自动生成标准化PDF文档
- 计算警情数据哈希值并构建默克尔树
- 将警情记录通过智能合约保存到区块链
- 支持通过警情编号在线验证
- 支持PDF文件上传验证
- 验证警情记录的上链状态和完整性
- 支持对错误的警情记录进行撤销
- 撤销记录会永久保存在区块链上,并包含撤销原因
- 撤销后的记录会被标记为无效
- 系统所有关键操作都会记录到区块链
- 支持查询完整的审计记录
- 提供友好的审计日志查询界面
- 支持警情数据的多条件查询
- 展示警情详情和区块链信息
- Web框架: Flask (Python)
- 区块链: 以太坊
- 智能合约: Solidity 0.8.x
- 分布式存储: IPFS
- 区块链交互: Web3.py
- PDF生成: ReportLab
管理与以太坊区块链的交互,提供区块链连接、合约调用等功能。
- PoliceRecordContract.sol: 管理警情记录的上链、验证和撤销
- AuditTrailContract.sol: 记录系统操作的审计日志
处理CSV格式警情数据,生成PDF文档,上传数据到区块链和IPFS。
验证警情数据的真实性和完整性,校验区块链上的信息。
提供警情记录撤销功能,将撤销信息上链。
提供Web用户界面,处理用户请求和响应。
管理与IPFS的交互,上传和下载文件。
- 登录系统
- 点击"上传数据"
- 上传符合格式的CSV文件
- 系统将自动处理数据并上链
- 生成PDF文档
- 计算默克尔树哈希
- 上传至IPFS
- 将记录保存到区块链
系统支持以下中文字段名的CSV文件:
| 中文字段名 | 说明 | 是否必填 |
|---|---|---|
| 警情编号 | 警情记录的唯一标识 | 是 |
| 接警时间 | 接收报警的时间,格式: YYYY-MM-DD HH:MM:SS | 是 |
| 处置人员 | 处理警情的警员姓名 | 是 |
| 处置结果 | 警情处置的结果描述 | 是 |
| 纬度 | 警情发生地点的纬度 | 否 |
| 经度 | 警情发生地点的经度 | 否 |
| 地理坐标 | 经纬度坐标,格式: "纬度,经度" | 否 |
| 报警类型 | 警情的类型,如治安纠纷、交通事故等 | 否 |
| 发生地点 | 警情发生的详细地址 | 否 |
| 报警人 | 报警人姓名 | 否 |
| 联系电话 | 报警人或联系人电话 | 否 |
| 优先级 | 警情处理的优先级,如高、中、低 | 否 |
| 出警单位 | 处理警情的派出所或分局 | 否 |
| 出警时间 | 警员出警的时间,格式: YYYY-MM-DD HH:MM:SS | 否 |
| 警情描述 | 对警情的详细描述 | 否 |
CSV文件第一行应为表头,包含上述中文字段名。系统会自动识别和处理这些字段,即使字段顺序不同也能正确处理。
示例:
警情编号,接警时间,处置人员,处置结果,地理坐标,报警类型,发生地点,报警人,联系电话
PJ2024060501,2024-06-05 10:00:00,张警官,已处理,39.915119,116.403963,交通事故,北京市朝阳区建国路,王先生,13800138000- 点击"验证数据"
- 输入警情编号或上传PDF文件
- 系统将验证数据在区块链上的状态
- 数据是否存在
- 数据完整性
- 数据是否被撤销
- 点击"撤销记录"
- 输入警情编号和撤销原因
- 系统将通过智能合约记录撤销操作
- 撤销记录将被永久保存在区块链上
- 点击"审计记录"
- 查看系统的操作记录
- 支持按记录ID查询特定记录
+------------------+ +-------------------+ +-------------------+
| | | | | |
| Web界面 (Flask) |---->| 警情数据处理模块 |---->| 区块链交互模块 |
| | | | | |
+------------------+ +-------------------+ +-------------------+
| | |
v v v
+------------------+ +-------------------+ +-------------------+
| | | | | |
| 用户认证模块 | | PDF生成模块 | | 智能合约 |
| | | | | |
+------------------+ +-------------------+ +-------------------+
| |
v v
+-------------------+ +-------------------+
| | | |
| IPFS存储模块 | | 以太坊区块链 |
| | | |
+-------------------+ +-------------------+
系统使用两个主要智能合约:
- 负责警情记录的管理
- 提供数据上链、验证和撤销功能
- 支持记录状态查询和哈希验证
- 负责系统操作的审计跟踪
- 记录关键操作和用户行为
- 提供审计记录查询接口
PoliceChainSystem/
├── app.py # 应用入口
├── start.py # 快速启动脚本
├── views.py # Web视图函数
├── models.py # 数据模型
├── init_db.py # 数据库初始化
├── PoliceBlockchain.py # 区块链交互
├── PoliceDataUpload.py # 数据上传处理
├── PoliceDataVerification.py # 数据验证
├── PoliceDataRevoke.py # 数据撤销
├── PoliceTemplatePDF.py # PDF生成
├── ipfs_utils.py # IPFS工具
├── merkleUtils.py # 默克尔树工具
├── contract_manager.py # 智能合约管理
├── deploy_contracts.py # 合约部署工具
├── contracts/ # 智能合约目录
│ ├── PoliceRecordContract.sol # 警情记录合约
│ ├── AuditTrailContract.sol # 审计跟踪合约
│ └── contract_addresses.json # 合约地址配置
├── templates/ # HTML模板
│ ├── home.html # 首页
│ ├── login.html # 登录页
│ ├── upload.html # 上传页面
│ ├── verify.html # 验证页面
│ ├── revoke.html # 撤销页面
│ ├── query.html # 查询页面
│ └── audit_trail.html # 审计记录页面
├── static/ # 静态资源
├── database/ # 数据库目录
├── police_records/ # 警情记录目录
└── upload/ # 上传文件目录
- 更新智能合约(如需要)
- 在contract_manager.py中添加新的合约交互函数
- 在相应模块中实现新功能
- 更新Web界面
修改PoliceTemplatePDF.py文件中的模板生成函数,可以自定义PDF输出格式。
- 修改PoliceBlockchain.py中的区块链连接配置
- 重新部署智能合约 (python deploy_contracts.py)
-
区块链连接失败
- 确保以太坊节点(Ganache)正在运行
- 检查连接URL是否正确
-
IPFS连接问题
- 确保IPFS守护进程正在运行
- 系统默认会在IPFS不可用时切换到模拟模式
-
合约部署失败
- 检查Solidity编译器版本
- 确保账户有足够的以太币
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
如有问题或建议,请联系项目维护者: