murariguna/blockchain-system
GitHub: murariguna/blockchain-system
一个基于 Hyperledger Fabric 的区块链电子健康病历平台,通过智能合约与角色权限控制实现去中心化、可审计的医疗数据安全管理与共享。
Stars: 0 | Forks: 0
# 基于区块链的电子健康病历平台
一个使用 Hyperledger Fabric、Node.js、Docker 和 IPFS 构建的、由区块链驱动的电子健康病历 (EHR) 平台。
本项目展示了如何将企业级区块链应用于:
* 安全的患者病历管理
* 去中心化的医疗数据共享
* 基于角色的访问控制
* 不可篡改的医疗审计日志
* 多组织医疗生态系统
# 技术栈
| 技术 | 用途 |
| -------------------------- | ---------------------------------- |
| Hyperledger Fabric | 企业级区块链框架 |
| Node.js | 后端 API 和 SDK 集成 |
| Fabric Node SDK | 区块链交互 |
| Docker | 容器化区块链部署 |
| Hyperledger Explorer | 区块链可视化与监控 |
| Angular / Next.js Frontend | 用户界面 |
| CouchDB | 状态数据库 |
| IPFS | 去中心化文件存储 |
| WSL2 | Windows 上的 Linux 开发环境 |
# 项目架构
```
Frontend UI
↓
Node.js Backend APIs
↓
Hyperledger Fabric SDK
↓
Smart Contracts (Chaincode)
↓
Fabric Blockchain Network
├── Org1 (Hospital)
├── Org2 (Insurance)
├── Orderer
├── Certificate Authorities
├── CouchDB
└── Hyperledger Explorer
```
# 项目结构
```
EHR-Hyperledger-Fabric-Project/
│
├── fabric-samples/ # Hyperledger Fabric samples and network
├── server-node-sdk/ # Backend APIs and Fabric SDK scripts
├── fabric-explorer/ # Hyperledger Explorer setup
├── backup/ # Backup utility scripts
├── screenshots/ # Project screenshots
├── README.md
└── install-fabric.sh
```
# 前置条件
开始之前,请安装:
* Docker Desktop
* WSL2 Ubuntu
* Node.js >= 20
* npm >= 10
* Git
* 带有 WSL 扩展的 VS Code
# 项目设置步骤
# 1. 下载 Fabric 二进制文件和示例
```
./install-fabric.sh
```
这将下载:
* Fabric 二进制文件
* Docker 镜像
* Fabric 示例代码库
# 2. 启动 Fabric 测试网络
```
cd fabric-samples/test-network
./network.sh up
```
检查容器:
```
docker ps
```
停止网络:
```
./network.sh down
```
# 3. 创建通道并启动 CA
```
cd fabric-samples/test-network
./network.sh up createChannel -ca
```
这将:
* 启动 peer 节点
* 启动 orderer 节点
* 启动 CA 服务器
* 创建 `mychannel`
# 4. 部署链码
```
./network.sh deployCC -ccn ehrChainCode -ccp ../asset-transfer-basic/chaincode-javascript/ -ccl javascript
```
如果部署成功,您将看到:
```
Chaincode initialization is not required
```
# 5. 注册管理员身份
```
cd server-node-sdk/
node cert-script/registerOrg1Admin.js
node cert-script/registerOrg2Admin.js
```
# 6. 接入网络参与者
```
node cert-script/onboardHospital01.js
node cert-script/onboardDoctor.js
node cert-script/onboardInsuranceCompany.js
node cert-script/onboardInsuranceAgent.js
```
这些脚本将:
* 注册身份
* 登记用户
* 将凭据存储在钱包中
* 调用区块链交易
# 7. 启动后端服务器
```
npm install
npm run dev
```
后端运行于:
```
http://localhost:5000
```
# API 列表
| API | 用途 |
| --------------------- | ---------------------- |
| registerPatient | 注册患者 |
| loginPatient | 患者登录 |
| grantAccess | 授予医生访问权限 |
| addRecord | 添加患者病历 |
| getRecordById | 根据 ID 获取病历 |
| getAllRecordByPatienId | 获取患者病历 |
| fetchLedger | 获取区块链账本 |
# 链码逻辑
## 网络中的参与者
1. 政府 - 网络所有者
2. 医院 - 网络组织
3. 医生 - 医院成员
4. 诊断中心
5. 药房
6. 研究人员 / 研发部门
7. 保险公司
8. 患者
# 读/写权限
| 参与者 | 权限 |
| ------------------- | ------------------------ |
| 政府 | 管理员访问权限 |
| 医院 | 读/写医生数据 |
| 医生 | 读/写患者数据 |
| 诊断中心 | 读/写诊断记录 |
| 药房 | 读/写处方 |
| 研究人员 | 基于同意的只读访问 |
| 保险公司 | 读/写理赔记录 |
| 患者 | 对自身数据的完全访问权限 |
# 账本对象结构
## 医院对象
```
{
"recordType": "hospital",
"createdBy": "hospitalId",
"data": {
"name": "ABC Hospital",
"address": "ABC Location"
}
}
```
## 医师对象
```
{
"recordType": "physician",
"createdBy": "physicianID",
"data": {
"name": "Doctor Name",
"hospital": "ABC Hospital"
}
}
```
# Hyperledger Explorer 设置
## 步骤 1:进入 Explorer 文件夹
```
cd fabric-explorer/
```
## 步骤 2:复制 Organizations 文件夹
```
sudo cp -r ../fabric-samples/test-network/organizations/ .
cp -r ../fabric-samples/test-network/organizations/ .
```
## 步骤 3:导出环境变量
```
export EXPLORER_CONFIG_FILE_PATH=./config.json
export EXPLORER_PROFILE_DIR_PATH=./connection-profile
export FABRIC_CRYPTO_PATH=./organizations
```
## 步骤 4:配置 test-network.json
在 `adminPrivateKey` 中:
* 验证证书路径
* 确保密钥文件名与加密材料匹配
## 步骤 5:启动 Explorer
不带日志:
```
docker-compose up -d
```
带日志:
```
docker-compose up
```
## 步骤 6:停止 Explorer
```
docker-compose down
```
# 展示的项目功能
✅ 多组织 Fabric 网络
✅ 链码部署
✅ 智能合约调用
✅ Node SDK 集成
✅ Blockchain Explorer 监控
✅ Docker 化的基础设施
✅ 基于 CA 的身份管理
✅ CouchDB 状态数据库
✅ 医疗角色管理
# 使用的 Docker 容器
该项目使用了多个容器:
* peer0.org1.example.com
* peer0.org2.example.com
* orderer.example.com
* ca_org1
* ca_org2
* ca_orderer
* couchdb0
* couchdb1
* fabric-explorer
* 链码容器
# 遇到的主要问题及解决方案
本项目最大的学习经验之一是调试和解决实际的企业级区块链设置问题。
# ⚠️ 1. WSL 问题
## 问题
VS Code 无法在 WSL 中正常打开。
## 解决方案
安装了:
* WSL2
* VS Code WSL 扩展
使用了:
```
code .
```
同时修复了 PATH 配置问题。
# ⚠️ 2. Docker Socket 管道断裂错误
## 问题
```
write unix @->/var/run/docker.sock: write: broken pipe
```
在部署链码时。
## 原因
损坏的/过期的 Fabric Docker 镜像。
## 解决方案
删除了旧镜像:
```
docker rmi hyperledger/fabric-peer:latest -f
docker rmi hyperledger/fabric-orderer:latest -f
docker rmi hyperledger/fabric-ca:latest -f
```
然后重启了 Docker Desktop。
# ⚠️ 3. npm + WSL 路径冲突
## 问题
npm 在 WSL 内部使用了 Windows 二进制文件。
错误:
```
UNC paths are not supported
```
## 解决方案
在 WSL 中禁用了 Windows PATH 集成。
验证:
```
which node
which npm
```
预期结果:
```
/usr/bin/node
/usr/bin/npm
```
# ⚠️ 4. Angular 版本不匹配
## 问题
Angular CLI 和 Angular 核心版本不兼容。
## 解决方案
安装了兼容的版本:
```
npm install --legacy-peer-deps
npm install @types/node@16 --save-dev
```
# ⚠️ 5. Git Submodule 问题
## 问题
`fabric-samples` 被当作内嵌的 Git 仓库处理。
## 解决方案
移除了嵌套的 Git 元数据:
```
rm -rf fabric-samples/.git
```
然后重新添加了项目文件。
# ⚠️ 6. 找不到链码函数
## 问题
```
You've asked to invoke a function that does not exist: onboardDoctor
```
## 原因
后端 SDK 调用的函数在部署的链码中未实现。
## 解决方案
更新并重新部署了正确的链码。
# ⚠️ 7. Node.js 版本兼容性
## 问题
旧版本的 Node.js 导致 Fabric SDK 失败。
## 解决方案
升级到:
```
Node.js v20+
```
# ⚠️ 8. Explorer 加密路径错误
## 问题
Explorer 加载网络失败。
## 解决方案
正确复制了:
```
organizations/
```
并更新了:
```
adminPrivateKey path
```
在 Explorer 连接配置文件中。
# 主要学习成果
本项目提供了以下方面的实践经验:
* 企业级区块链开发
* 智能合约部署
* Docker 容器编排
* 分布式账本架构
* 区块链身份管理
* Hyperledger Fabric 管理
* 真实场景调试
* WSL Linux 开发
* Node SDK 集成
* 区块链监控与分析
# 未来改进
计划的增强功能:
* 完整的医疗前端 UI
* JWT 认证
* IPFS 加密医疗文件存储
* 基于角色的仪表盘
* 患者同意工作流
* 区块链分析
* 审计报告
* REST API 文档
* Kubernetes 部署
* CI/CD 流水线
# 作者
Murari Guna
GitHub 代码库:
[https://github.com/murariguna/blockchain-system](https://github.com/murariguna/blockchain-system)
# 参考与致谢
## Hyperledger Fabric 官方代码库
- Hyperledger Fabric GitHub 代码库:
https://github.com/hyperledger/fabric
- Hyperledger Fabric 示例代码库:
https://github.com/hyperledger/fabric-samples
- Hyperledger Explorer 代码库:
https://github.com/hyperledger-labs/blockchain-explorer
- Hyperledger Fabric 文档:
https://hyperledger-fabric.readthedocs.io/
- 额外的架构与实现参考:
https://github.com/akshaykurhekar/EHR-Hyperledger-Fabric-Project.git
# 📜 许可证与归属
本项目使用来自 Hyperledger Fabric 生态系统的组件和工具。
Hyperledger Fabric 采用 Apache License 2.0 许可。
- Apache License 2.0:
https://www.apache.org/licenses/LICENSE-2.0
- Hyperledger 项目网站:
https://www.hyperledger.org/
标签:EVTX分析, GNU通用公共许可证, Hyperledger Fabric, IPFS, MITM代理, Node.js, 区块链, 医疗信息化, 智能合约, 权限控制, 电子病历, 请求拦截