Skip to content

About

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

警情链区块链系统

一个基于以太坊区块链技术的警情数据管理系统,实现了警情数据上链存证、验证和撤销等核心功能。

系统概述

警情链系统旨在提高警情数据的可信度、透明度和安全性。系统使用以太坊区块链存储警情数据哈希,通过智能合约实现数据的不可篡改和可验证性,同时结合IPFS分布式存储系统保存警情PDF文件,建立了完整的警情数据链上管理体系。

快速开始

环境要求

  • Python 3.8+
  • 以太坊节点 (Ganache/Geth)
  • IPFS节点 (可选)
  • Solidity编译器 (solc 0.8.x)

安装与启动

  1. 安装依赖:

    pip install -r requirements.txt
    
  2. 初始化系统:

    python start.py --init
    
  3. 启动应用:

    python start.py
    
  4. 访问应用:

核心功能

1. 警情数据上链

  • 支持CSV格式的警情数据批量导入
  • 自动生成标准化PDF文档
  • 计算警情数据哈希值并构建默克尔树
  • 将警情记录通过智能合约保存到区块链

2. 警情数据验证

  • 支持通过警情编号在线验证
  • 支持PDF文件上传验证
  • 验证警情记录的上链状态和完整性

3. 警情记录撤销

  • 支持对错误的警情记录进行撤销
  • 撤销记录会永久保存在区块链上,并包含撤销原因
  • 撤销后的记录会被标记为无效

4. 审计跟踪

  • 系统所有关键操作都会记录到区块链
  • 支持查询完整的审计记录
  • 提供友好的审计日志查询界面

5. 数据查询

  • 支持警情数据的多条件查询
  • 展示警情详情和区块链信息

技术架构

后端技术栈

  • Web框架: Flask (Python)
  • 区块链: 以太坊
  • 智能合约: Solidity 0.8.x
  • 分布式存储: IPFS
  • 区块链交互: Web3.py
  • PDF生成: ReportLab

核心模块

区块链模块 (PoliceBlockchain.py)

管理与以太坊区块链的交互,提供区块链连接、合约调用等功能。

智能合约 (contracts/)

  • PoliceRecordContract.sol: 管理警情记录的上链、验证和撤销
  • AuditTrailContract.sol: 记录系统操作的审计日志

数据上传模块 (PoliceDataUpload.py)

处理CSV格式警情数据,生成PDF文档,上传数据到区块链和IPFS。

数据验证模块 (PoliceDataVerification.py)

验证警情数据的真实性和完整性,校验区块链上的信息。

数据撤销模块 (PoliceDataRevoke.py)

提供警情记录撤销功能,将撤销信息上链。

Web界面模块 (views.py)

提供Web用户界面,处理用户请求和响应。

IPFS工具模块 (ipfs_utils.py)

管理与IPFS的交互,上传和下载文件。

使用指南

数据上传流程

  1. 登录系统
  2. 点击"上传数据"
  3. 上传符合格式的CSV文件
  4. 系统将自动处理数据并上链
    • 生成PDF文档
    • 计算默克尔树哈希
    • 上传至IPFS
    • 将记录保存到区块链

CSV文件格式说明

系统支持以下中文字段名的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

数据验证流程

  1. 点击"验证数据"
  2. 输入警情编号或上传PDF文件
  3. 系统将验证数据在区块链上的状态
    • 数据是否存在
    • 数据完整性
    • 数据是否被撤销

数据撤销流程

  1. 点击"撤销记录"
  2. 输入警情编号和撤销原因
  3. 系统将通过智能合约记录撤销操作
  4. 撤销记录将被永久保存在区块链上

审计记录查询

  1. 点击"审计记录"
  2. 查看系统的操作记录
  3. 支持按记录ID查询特定记录

系统架构图

+------------------+     +-------------------+     +-------------------+
|                  |     |                   |     |                   |
|  Web界面 (Flask) |---->| 警情数据处理模块  |---->| 区块链交互模块    |
|                  |     |                   |     |                   |
+------------------+     +-------------------+     +-------------------+
        |                         |                         |
        v                         v                         v
+------------------+     +-------------------+     +-------------------+
|                  |     |                   |     |                   |
|  用户认证模块    |     |  PDF生成模块      |     |  智能合约         |
|                  |     |                   |     |                   |
+------------------+     +-------------------+     +-------------------+
                                  |                         |
                                  v                         v
                         +-------------------+     +-------------------+
                         |                   |     |                   |
                         |  IPFS存储模块    |     |  以太坊区块链     |
                         |                   |     |                   |
                         +-------------------+     +-------------------+

智能合约

系统使用两个主要智能合约:

PoliceRecordContract

  • 负责警情记录的管理
  • 提供数据上链、验证和撤销功能
  • 支持记录状态查询和哈希验证

AuditTrailContract

  • 负责系统操作的审计跟踪
  • 记录关键操作和用户行为
  • 提供审计记录查询接口

项目目录结构

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/                    # 上传文件目录

开发者指南

添加新功能

  1. 更新智能合约(如需要)
  2. 在contract_manager.py中添加新的合约交互函数
  3. 在相应模块中实现新功能
  4. 更新Web界面

自定义PDF模板

修改PoliceTemplatePDF.py文件中的模板生成函数,可以自定义PDF输出格式。

更改区块链网络

  1. 修改PoliceBlockchain.py中的区块链连接配置
  2. 重新部署智能合约 (python deploy_contracts.py)

常见问题

  1. 区块链连接失败

    • 确保以太坊节点(Ganache)正在运行
    • 检查连接URL是否正确
  2. IPFS连接问题

    • 确保IPFS守护进程正在运行
    • 系统默认会在IPFS不可用时切换到模拟模式
  3. 合约部署失败

    • 检查Solidity编译器版本
    • 确保账户有足够的以太币

许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

联系方式

如有问题或建议,请联系项目维护者:

About

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages