# block-file-hash **Repository Path**: jeromekent/block-file-hash ## Basic Information - **Project Name**: block-file-hash - **Description**: 将文件hash上传区块链,实现数据完整性检查的实验 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-03-12 - **Last Updated**: 2023-05-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 区块链网络 将文件hash上传区块链,实现数据完整性检查的实验。编写了两个服务端进行交互,api相同,分别为:上传文件、查询hash、上传文件验证hash值。 fabric使用1.4长期支持版,使用docker模拟搭建,网络中两个组织,对应两个node服务端,包含了文件hash生成(文件命名不影响hash值)、分布式id生成等功能。 ##### 环境 docker node.js:v12.22.12(非此版本容易报错) git (**windows环境下命令要在git bash中运行,且尽量管理员权限**) ##### 镜像拉取 > docker pull hyperledger/fabric-peer:1.4.8 && > > docker tag hyperledger/fabric-peer:1.4.8 hyperledger/fabric-peer:latest && > > docker pull hyperledger/fabric-orderer:1.4.8 && > > docker tag hyperledger/fabric-orderer:1.4.8 hyperledger/fabric-orderer:latest && > > docker pull hyperledger/fabric-tools:1.4.8 && > > docker tag hyperledger/fabric-tools:1.4.8 hyperledger/fabric-tools:latest && > > docker pull hyperledger/fabric-ccenv:1.4.8 && > > docker tag hyperledger/fabric-ccenv:1.4.8 hyperledger/fabric-ccenv:latest && > > docker pull hyperledger/fabric-ca:1.4.8 && > > docker tag hyperledger/fabric-ca:1.4.8 hyperledger/fabric-ca:latest&& > > docker pull hyperledger/fabric-baseos:0.4.21 && > > docker tag hyperledger/fabric-baseos:0.4.21 hyperledger/fabric-baseos:latest && > > docker pull hyperledger/fabric-couchdb:0.4.21 && > > docker tag hyperledger/fabric-couchdb:0.4.21 hyperledger/fabric-couchdb:latest && > > docker pull hyperledger/fabric-baseimage:0.4.21 && > > docker tag hyperledger/fabric-baseimage:0.4.21 hyperledger/fabric-baseimage:latest ##### 网络启动 在basic-network文件夹下运行./start.sh程序执行成功后会看到docker中生成处一个如下图的容器栈,一共有7个容器。两个组织各一个CA容器,各一个节点,数据库是公用的。 > ./start.sh 在这一步会启动区块链网络,生成通道,并将两个组织的锚节点加入通道 ##### 链码安装 依然在basic-network文件夹下运行./startchaincode.sh程序执行成功后会看到docker中生成两个链码容器。如图 > ./startchaincode.sh ![](./img/20230313165941.png) 这一步会启动两个智能合约容器,合约都为filecc分别挂靠在两个组织的节点上 ##### 用户注册 然后分别在webappA和webappB文件下执行依次执行这两行命令: > npm install > > ./start.sh 这一步是为了注册用户,会为两个组织申请个admin用户,与一个名为user1_org1(user_org2)的普通用户 ##### 网络端启动 分别在webappA和webappB文件下分别执行: > node app.js webappA会生成端口在8000的客户端和3001的snowflakeid。snowflakeid是用来做分布式全局唯一id的,用来存储文件hash。webappB会生成端口在8001的客户端。 两个客户端可以互为上传下载端口。 ##### api文档 api文档在api.md中,可以使用postman进行调用测试 也可以在启动网络端之后使用[此网页](https://www.apifox.cn/apidoc/shared-01a8532d-bd34-4061-8e1b-3c56d50b4038)进行调用测试